در
بخش قبلی این مقاله به تکنیکی اشاره شده است که
کدهای 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';