PDA

View Full Version : update کردن چند رکورد با id های مختلف



Mrs.Net
چهارشنبه 20 تیر 1386, 13:36 عصر
دستور update میخوام که روی رکوردهایی که id برابر 2 یا 4 یا 5 یا .... بود عمل کنه
چون با آداپتر کار میکنم و تعداد اعداد هم تو برنامه مشخص میشه و ثابت نیست
پس باید بصورت یک رشته به آداپتر پاس بشه
ممنون

MajerajooyeKhallagh
چهارشنبه 20 تیر 1386, 14:29 عصر
دستور update میخوام که روی رکوردهایی که id برابر 2 یا 4 یا 5 یا .... بود عمل کنه
چون با آداپتر کار میکنم و تعداد اعداد هم تو برنامه مشخص میشه و ثابت نیست
پس باید بصورت یک رشته به آداپتر پاس بشه
ممنون

دوست عزیز
شما میتونید از کد زیر در غالب یک استوردپراسیجر استفاده کنید:



DECLARE @UpdateItem int
SET @UpdateItem=1
DECLARE @SqlStr ASNVARCHAR(MAX)
SET @SqlStr=''
DECLARE @ID_Collection NVARCHAR(100)
SET @ID_Collection='2,3,4,5'
SET @SqlStr='UPDATE TableName
SET F1='+CAST(@UpdateItem ASNVARCHAR)+'WHERE Id IN ('+@ID_Collection+')'


EXEC(@SqlStr)

که شما مقادیر متغیر @ID_Collection را در برنامه خود به صورت داینامیک میسازید و به استوردپراسیجر خود پاس میدهید که من در اینجا مقدار این متغیر را به صورت ثابت گرفتم




موفق باشید

Kamyar.Kimiyabeigi
چهارشنبه 20 تیر 1386, 14:41 عصر
چون مقادیر ID شما مشخص نیست شما باید از Dynamic SQL استفاده کنین

CREATE PROCEDURE UpdateTbl @prm_ID VARCHAR(100)
AS
EXECUTE( 'UPDATE dbo.Categories
SET CategoryName = '' Test Word ''
WHERE CategoryID IN (' + @prm_ID + ')' )

EXECUTE UpdateTbl '4, 6'

Mrs.Net
چهارشنبه 20 تیر 1386, 14:50 عصر
آیا تو استوردپراسیجر میشه از for استفاده کنم و هربار مقادیری عوض کنم و بعد در بانک ثبت کنم؟

MajerajooyeKhallagh
چهارشنبه 20 تیر 1386, 14:55 عصر
آیا تو استوردپراسیجر میشه از for استفاده کنم و هربار مقادیری عوض کنم و بعد در بانک ثبت کنم؟

در استوردپراسیجر for نداریم ولی بر حسب نیازتون میتونید از While یا Cursor استفاده کنید ولی یادتون باشه که cursor کارایی را پایین می اورد و تا حد امکان سعی کنید از cursor استفاده نکنید

Kamyar.Kimiyabeigi
چهارشنبه 20 تیر 1386, 15:01 عصر
آیا تو استوردپراسیجر میشه از for استفاده کنم و هربار مقادیری عوض کنم و بعد در بانک ثبت کنم؟

در SQL Server باید از Cursors استفاده کنیند (ترجیحا" اگر واقعا" مجبورید استفاده کنید چون کند میکنه)
نمونه

USE Northwind
GO

DECLARE @CategoryName varchar(15)

DECLARE authors_cursor CURSOR FOR

SELECT CategoryName FROM dbo.Categories
ORDER BY CategoryName

OPEN authors_cursor

FETCH NEXT FROM authors_cursor
INTO @CategoryName

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Test Category: ' + @CategoryName
FETCH NEXT FROM authors_cursor
INTO @CategoryName
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
GO