محتویات سایت
        برچسب های محبوب 








 
   تکنیکی برای Update داده ها (بخش دوم)
  در بخش قبلی این مقاله به تکنیکی اشاره کردم که کدهای Update را با یک دستور SELECT تولید می کرد و ما نیاز داشتیم دوباره این کدها را اجرا کنیم. ولی در تکنیکی که در این مقاله به آن اشاره کرده ام با کمک Dynamic SQL کدها را بطور اتوماتیک تولید و بطور اتوماتیک نیز اجرا می کند. کافیست که SP را با یک پارامتر مناسب EXECUTE کنید.
   SQL Server
   ۱۳۰۰۷
   این مقاله حاوی فایل ضمیمه نمی باشد
   محمد سلیم آبادی
   ۱۳۸۹/۳/۱۲
نسخه قابل چاپ نسخه قابل چاپ

در بخش قبلی این مقاله به تکنیکی اشاره شده است که کدهای UPDATE را بطور اتوماتیک تولید می کرد و ما می بایست کدهای تولید شده در بخش Result را کپی می کردیم و پس از Paste کردن اجرایشان می کردیم. ولی اگر بخواهیم تمام این مراحل به طور خودکار توسط یک SP بگیرد باید چکار کرد؟ یعنی SP طراحی کنیم که با دادن نام بانک، خود کدهای UPDATE را تولید و خود این کد ها را اجرا کند. این سوالی بود که یکی از کاربران در یک فروم پرسیده بود.

برای ایجاد این چنین Stored Procedure هایی باید از Dynamic SQL کمک گرفت. پروسیجر زیر این کار را انجام می دهد. کافی است آن را با یک پارامتر رشته ای که نام بانک مورد نظر است اجرا کنید.

CREATE PROC auto_update (@database_name VARCHAR(50)) AS 
BEGIN
    DECLARE @s1 VARCHAR(MAX) = '';
    DECLARE @s2 TABLE(i VARCHAR(MAX));

    SELECT  @s1 = 
            'USE ' + @database_name + 
            ' SELECT ''UPDATE '' + ' + QUOTENAME(QUOTENAME(@database_name), '''')  + ' + ''..['' + table_name + '']'' +
            '' SET '' + ''['' + column_name + '']'' + '' = '' + column_default +
            '' WHERE '' + ''['' + column_name + ''] IS NULL'' + '';''
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE column_default IS NOT NULL 
            AND OBJECTPROPERTY(OBJECT_ID(table_name),''istable'') = 1; '

     
     INSERT @s2 EXECUTE(@s1);

     SET @s1 = '';
     SELECT @s1 = @s1 + i FROM @s2;

     EXECUTE(@s1);
END
GO

--Example
EXECUTE auto_update 'autoupdate';