如何:
DECLARE @sql NVARCHAR(MAX);
SELECT @sql = COALESCE(@sql, '') + '
EXEC msdb.dbo.sp_update_job @job_id = '''
+ CONVERT(NVARCHAR(255), job_id)
+ ''', @owner_login_name = ''sa'';'
FROM msdb.dbo.sysjobs;
EXEC sp_sqlexec @sql;
注意的是sp_sqlexec是無證和不支持。要做到這一點在支持的方式,爲什麼不創建一個遊標,這是很容易跟蹤和調試(沒有紅色的海洋,沒有「看不見」的SQL):
DECLARE @j UNIQUEIDENTIFIER;
DECLARE c CURSOR FOR
SELECT job_id FROM msdb.dbo.sysjobs;
OPEN c;
FETCH NEXT FROM c INTO @j;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC msdb.dbo.sp_update_job
@job_id = @j,
@owner_login_name = 'sa';
FETCH NEXT FROM c INTO @j;
END
DEALLOCATE c;
或者以往更容易,因爲MSDB。 dbo.sysjobs在技術上不是系統表,您可以直接編輯:
UPDATE msdb.dbo.sysjobs
SET owner_sid = SUSER_SID('sa');
謝謝。 最後一點幫助了我。順便說一句,COALESCE是什麼? – Manjot 2009-10-20 02:02:32
http://msdn.microsoft.com/en-us/library/ms190349.aspx – 2009-10-20 02:12:48
光標可以是一件好事的最佳例子。 – HLGEM 2009-10-20 15:11:46