ورود

View Full Version : Update رکوردهای دریافت شده در یک دستور Select



nazaninam
سه شنبه 06 فروردین 1387, 21:07 عصر
با سلام
بعد از دریافت یک سری رکورد از دیتابیس قرار هست که یک عمل آپدیت بر روی رکورد های دریافت شده انجام بشه ولی از اونجایی که داخل این دستور Select از order by بر حسب newid استفاده شده نمیتونم از دستور آپدیت استفاده کنم !
کد select من به شکل زیر است :



SELECT Top(@Top) Adver_Pk, Subject,substring(cast([Content] as nvarchar(155)),0,150)+' ... ' as [content],[Rank]
FROM TBL_Adver
Where ([ShowConf]=1) And ([Payment]=1) And ([Type] in (2,4))
order by [rank] desc , newid()



برای اینکار چه روشی را پیشنها می کنید ؟

night_walker
چهارشنبه 07 فروردین 1387, 09:27 صبح
برای این کار از یکSELECT تو در تو به صورت زیر استفاده کن:
UPDATE TBL_Adver WHERE table_id in(SELECT Top(@Top) table_id FROM TBL_Adver
Where ([ShowConf]=1) And ([Payment]=1) And ([Type] in (2,4))
order by [rank] desc , newid())

nazaninam
چهارشنبه 07 فروردین 1387, 10:49 صبح
این کار یک مشکلی که داره به نظرم اینه که دوبار داریم دستور select را اجرا می کنیم !
آیا این امکان هست که در هنگام select اول آی دی رکورد های دریافت شده را در یک متغیر ذخیره کنیم و سپس عمل Update را بر روی آنها انجام بدهیم ؟
ممنون از توجه شما

AminSobati
جمعه 09 فروردین 1387, 01:35 صبح
نمیتونیم به طور قطعی بگیم دستور Select داره تکرار میشه. ممکنه SQL Server برای انجام این کار از Join استفاده کنه و کار به شکل بهینه انجام بشه. این از روی Execution Plan قابل تشخیص خواهد بود که چه روندی مورد استفاده قرار گرفته

nazaninam
جمعه 09 فروردین 1387, 20:02 عصر
مشکل دیگه ای هم هست ! رکوردهایی که در دو select دریافت شده اند باهم متفاوتند چون به صورت رندوم دریافت شدند !! من از NewID استفاده کردم