Sqlserver使用遊標迴圈插入,把select語句的結果當成value值的一部分insert到一張表

lusklusklusk發表於2021-12-03

查詢出所有job名稱
select name from IBDMMSQL.msdb.dbo.sysjobs where enabled=1 and name not like 'Database%' and name not like 'DB%' order by 1   

把job名稱當成第二個欄位的value值(如下的'job_name')插入[jobs].[Settings]
insert into [jobs].[Settings] values (3008,'job_name',null,null,GETDATE(),'Lukes Liao',null,null)

把[jobs].[Settings]新增的SettingID(自增長欄位)當成第一個欄位value值(如下的172)插入[jobs].[Subscriptions]
insert into [jobs].[Subscriptions] values(172,'Programming@will.com')
insert into [jobs].[Subscriptions] values(172,'DBA@will.com')





寫法
遊標1:把job名稱當成第二個欄位的value值插入[jobs].[Settings]
DECLARE @jobname varchar(200) --宣告變數,使用者接收迴圈時的變數

DECLARE RunPerRow CURSOR FOR  --定義遊標
select name from IBDMMSQL.msdb.dbo.sysjobs where enabled=1 and name not like 'Database%' and name not like 'DB%' and name not in ('sp_purge_jobhistory','syspolicy_purge_history') order by 1  
OPEN RunPerRow --開啟遊標

FETCH NEXT FROM RunPerRow into @jobname  --從遊標裡取出資料賦值到宣告的變數中

while @@FETCH_STATUS = 0  --返回被FETCH語句執行的最後遊標的狀態,0表示fetch語句成功,1表示fetch語句失敗,2表示被提取的行不存在
begin
insert into [jobs].[Settings] values (2994,@jobname,null,null,GETDATE(),'Lukes Liao',null,null)
print 'The cursor successfully fetched a row'
print @jobname
FETCH NEXT FROM RunPerRow into @jobname --轉到下一個遊標,沒有會死迴圈
end

CLOSE RunPerRow --關閉遊標
DEALLOCATE RunPerRow --撤銷遊標




遊標2:把[jobs].[Settings]新增的SettingID(自增長欄位)當成第一個欄位value值插入[jobs].[Subscriptions]
DECLARE @SettingID int --宣告變數,使用者接收迴圈時的變數

DECLARE RunPerRow CURSOR FOR  --定義遊標
select SettingID from [jobs].[Settings] where SettingID>172 order by 1

OPEN RunPerRow --開啟遊標

FETCH NEXT FROM RunPerRow into @SettingID  --從遊標裡取出資料賦值到宣告的變數中

while @@FETCH_STATUS = 0  --返回被FETCH語句執行的最後遊標的狀態,0表示fetch語句成功,1表示fetch語句失敗,2表示被提取的行不存在
begin
insert into [jobs].[Subscriptions] values(@SettingID,'Programming@will.com')
insert into [jobs].[Subscriptions] values(@SettingID,'DBA@will.com')
print 'The cursor successfully fetched a row'
print @SettingID
FETCH NEXT FROM RunPerRow into @SettingID --轉到下一個遊標,沒有會死迴圈
end

CLOSE RunPerRow --關閉遊標
DEALLOCATE RunPerRow --撤銷遊標

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2845721/,如需轉載,請註明出處,否則將追究法律責任。

相關文章