PDA

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



moferferi
پنج شنبه 20 بهمن 1390, 08:53 صبح
سلام.
با سرچی که کردم فهمیدم واسه حذف چند رکورد از دیتابیس باید از کد زیر استفاده کنیم
DELETE FROM [entityframework].[dbo].[Table_1]
WHERE id in(1,2,3,4)
GO


خوب حالا اگه بخواهیم مقادیر که تعداشون هم از قبل مشخص نیست را به این کوئری از طریق دات نت پاس بدیم باید چی کار کنیم.؟
ان را هم بگم که من توی برنامم گریدی دارم که کنار هر کدوم یه چک باکس هست.به وسیله جی کوئری اونهایی را که انتخاب شده اند را به سرور میفرستم که رشته شبیه
1,2,3,5,99,77 هست.حالا این رشته را میشه به صورت یه استرینگ به پروسیجر پاس داد و گذاشت داخل شرط پروسیجر؟یا اصلا این روش غلطه؟

Galawij
پنج شنبه 20 بهمن 1390, 09:16 صبح
از طریق SQL پویا.
این مثال را ببینید:

DECLARE @CategoriesId nvarchar(256)
DECLARE @SqlStatement NVARCHAR(500)
Set @CategoriesId='1,2,15,20'
Set @SqlStatement='SELECT CategoriesName FROM dbo.TbCategories WHERE IdCategories IN ('+@CategoriesId+')'
EXECUTEsp_executesql @SqlStatement

tiphooo
پنج شنبه 20 بهمن 1390, 16:52 عصر
و یا اگر بخواهید ایتدایی تر بنویسید
CREATE PROCEDURE sp_Del (@Param1 VARCHAR(1000))
AS
BEGIN
DECLARE @Item int,@Index SMALLINT

WHILE @Param1 <> ''
BEGIN
SET @Index=charindex(',',@Param1)
IF @Index=0
BEGIN
SET @Item=CAST(@Param1 AS INT)
SET @Param1=''
END
ELSE
BEGIN
SET @Item=Cast(SUBSTRING(@Param1,1,@Index-1) AS INT)
SET @Param1=SUBSTRING(@Param1,@Index+1,Len(@Param1)-@Index)
END

DELETE FROM [entityframework].[dbo].[Table_1]
WHERE id =@Item
END
END

البته طول پارامتر ورودی را 1000 گرفتم ولی در هر صورت پارامتر ورودی شما در هر دو حالت محدودیت خواهد داشت ممکن است پارامتر رکوردهای انتخاب شده شما از حداکثر سایز Varchar خارج باشد بهتر است این را از داخل App خود کنترل کنید و حذف را آنجا انجام دهید.(البته اگر حالتهای استثنا برای شما مهم است )