ورود

View Full Version : حذف چندین رکورد با stored procedure



rezaei manesh
شنبه 02 اردیبهشت 1385, 15:08 عصر
سلام
من می خوام چندین رکورد رو که idهای اونها توی یه متغیر استریگ هستش رو با Sp حذف کنم
من با همچین کدی که تو sp نوشتم از تو خود برنامه توسط دستور delete حذف می کنم اما این کد رو که توی sp می نویسم اشکال می گیره نمی دونم اشکالش کجاست؟
این کد:
CREATE PROCEDURE SPDeleteRank (
@StrIds nvarchar(100)
)
AS
Delete From Rank Where Idrank IN (@strIDs.Substring(0, @strIDs.LastIndexOf(",")))
RETURN
GO

کجاش مشکل داره؟

Kamyar.Kimiyabeigi
یک شنبه 03 اردیبهشت 1385, 06:43 صبح
شما در این قسمت میخواین چی کار کنین؟


(@strIDs.Substring(0, @strIDs.LastIndexOf(",")))

ما تو Tsql از نقطه (.) استفاده نمیکنیم؟؟؟؟؟

rezaei manesh
یک شنبه 03 اردیبهشت 1385, 07:53 صبح
سلام
من توی این قسمت می خوام تک تک آی دی ها رو پیدا کنم خوب جای نقطه از چه کاراکتری استفاده می شه؟
در کل شما اگه بخوان چندین رکورد رو حذف کنید چکار می کنید؟

Kamyar.Kimiyabeigi
یک شنبه 03 اردیبهشت 1385, 07:57 صبح
شما لطف کنین و بگین منظورتون از این قسمت چیه؟؟؟


(@strIDs.Substring(0, @strIDs.LastIndexOf(",")))

تا بتونیم درستشو براتون بنویسیم

rezaei manesh
یک شنبه 03 اردیبهشت 1385, 09:36 صبح
کار این قسمت این هست که از اولین شماره تا آخرین شماره (قبل از آخرین , ) یکی یکی کد ها رو بر می گردونه (برحسب ویلگول )
Delete From Rank Where Idrank IN آماده می کنه یعنی هر بار یه کد رو بر می گردونه
من کد بالا را به این صورت تغییر دادم اما هنوز یک . دیگه داریم دستور مشابه lastindexof توی اس کیو ال کدومه
((",")Substring(@strIDs,0, @strIDs.LastIndexOf

در ضمن من چطور باید کدها رو تو قسمت مخصوص کد قرار دهم یه بار پرسیدم بهم گفتن برو تو حالت پیشرفته من می رم اما جائی برای این کار نمی بینم

Kamyar.Kimiyabeigi
یک شنبه 03 اردیبهشت 1385, 10:24 صبح
اینم sp برای کار شما


CREATE PROCEDURE SPDeleteRank @StrIds NVARCHAR(100)

AS

EXECUTE('DELETE FROM Rank WHERE Idrank IN (' + @StrIds + ')')

GO

rezaei manesh
یک شنبه 03 اردیبهشت 1385, 10:51 صبح
سلام
آقا یک دنیا ممنون خیلی عالی بود فقط یه سوال تو این کد چطوری ویلگول رو تشخیص میده؟
با تشکر فراوان

Kamyar.Kimiyabeigi
یک شنبه 03 اردیبهشت 1385, 13:22 عصر
لازم نیست که ویرگول رو تشخیص بده در واقع ویرگول جزو syntax های دستور IN هست


DELETE FROM Rank WHERE Idrank IN (1,2,3)

rezaei manesh
دوشنبه 04 اردیبهشت 1385, 06:55 صبح
سلام
بسیار عالی
متشکر