PDA

View Full Version : سوال: آپدیت خاص رکورد ها



neynavaz
جمعه 26 آذر 1389, 11:30 صبح
سلام

من دوتا جدول دارم که با یه آیدی بهم ربط دارند
میخوام یه سری از رکوردهایی که تو جدول اصلیم هستند رو تغییر بدم به شرطی که
در جدول دوم دارای یه شرایط خاصی باشند

یه راه بنظرم رسید که اینه
تمام رکودهای مورد نطر رو سلکت کنم در دیتا ست بریزم
دونه دونه اپدیت کنم با حلقه

اما هم کار سنگینیه هم توی وب اینکار یعنی هنگیدن

کسی راهی داری که یههو آپدیت کنم
یا تو استورد پروروسیجر بنویسم؟

علیرضا حسن زاده
جمعه 26 آذر 1389, 12:42 عصر
شما سوال تون رو بهتر بود تو بخش SQL مطرح می کردین تا زود تر به جواب برسین

به هر حال چون ساختار جدوال شما نمی دونم این طوری می تونم راهنمایی کنم:
دو تا جدول رو باهم join کنید و شرط رو در join قرار بدین به این ترتیب سطرهایی که می خواین رو Select کردین بعد این دستور بعنوان منبع به قسمت شرط دستور Update بدین همین
البته روشهای بهتری هم وجود داره و روشی که گفتم یه حالت خیلی کلی هست اگه ساختار جدول و توع شرطی رو که می خواین بزارین رو بگین بهتر میشه تو بخش SQL جواب داد

neynavaz
جمعه 26 آذر 1389, 14:08 عصر
ممنون از لطفت امتحانش میکنم
مرسی که کمک کردید

میشه بگید چرا از قبول نمیکنه؟
من این کد رو با راهنماییتون نوشتم



UPDATE dbo.T_Message
set dbo.T_Message.Msgtype = -2
where
select dbo.T_Message.MSGId, dbo.Msg_S.Status FROM dbo.Msg_S INNER JOIN dbo.T_Message ON dbo.Msg_S.MsgId = dbo.T_Message.MSGId WHERE(dbo.Msg_S.Status = 1)

اینم خطاش که البته ارور بجایی هم هست


Msg 4145, Level 15, State 1, Line 7
An expression of non-boolean type specified in a context where a condition is expected, near ','.

neynavaz
جمعه 26 آذر 1389, 14:37 عصر
UPDATE dbo.T_Message
set dbo.T_Message.Msgtype = 1

select dbo.T_Message.MSGId, dbo.Msg_S.Status FROM dbo.Msg_S INNER JOIN dbo.T_Message ON dbo.Msg_S.MsgId = dbo.T_Message.MSGId WHERE(dbo.Msg_S.Status = 1)



با این کد اجرا میشه اما همه رکورد ها رو تغییر میده!!!1
چیکار کنم؟

علیرضا حسن زاده
جمعه 26 آذر 1389, 15:02 عصر
الان زیاد وقت ندارم درست بررسی کنم و درست یه دستور بنویسم براتون ولی فکر کنم این کد کارتون رو راه بندازه:

UPDATE (select dbo.T_Message.MSGId, dbo.Msg_S.Status FROM dbo.Msg_S INNER JOIN dbo.T_Message ON dbo.Msg_S.MsgId = dbo.T_Message.MSGId) as tmp
set tmp.Msgtype = -2
WHERE(tmp.Status = 1)
اگر هم مشکلی داشتین تو بخش SQL سوالتون رو بپرسید یا فردا جواب درست رو می گم

neynavaz
جمعه 26 آذر 1389, 15:13 عصر
UPDATE dbo.T_Message
set dbo.T_Message.Msgtype = -1

where
Exists
( select * FROM dbo.Msg_S INNER JOIN dbo.T_Message ON dbo.Msg_S.MsgId = dbo.T_Message.MSGId WHERE(dbo.Msg_S.Status = 1))

من این رو نوشتم باز هم روی همه رکوردها اثر میذاره!!!!
چرا؟؟
کد شما هم کلی ارور داره دارم سعی میکنم بر طرف کنم ببینم چطوره