2013-08-22 84 views
2

我想創建一個將所有作業插入到數據庫的過程。
(a。所有我的作業有相等的特性; B。SSDT犯規支持工作代碼管理)TSQL - 如何迭代字符串列表

現在,我想創建一個腳本,將所有這些,爲AC#develpoer我想我需要初始化與他們的名字列表。

我發現,當用谷歌搜索做的方式是在內存表中,最好的我可以來這是。

declare @jobsNames table(Id int, JobName nvarchar(100)) 

insert into @jobsNames (Id,JobName) 
    select 1,'JobName1' union 
    select 2,'JobName2' union 
    ...... 

BEGIN TRANSACTION 

DECLARE JobsCursor CURSOR FOR SELECT JobName FROM @jobsNames 
OPEN JobsCursor 

FETCH NEXT FROM JobsCursor INTO @JobName 
WHILE @@Fetch_status = 0 
BEGIN 
    .. do stuff 

    FETCH NEXT FROM JobsCursor INTO @JobName 
    WHILE @@Fetch_status = 0 
END 
COMMIT TRANSACTION 

問題 -

這是最短/ recomended方式?
(這似乎是一個foreach的hellotof代碼)

回答

0

我個人以避免像鼠疫遊標。請確保您必須迭代而不是基於您的工作集。他們不稱之爲RBAR

DECLARE @counter INT, @max INT 

SELECT @counter = 1, @max = max(id) 
FROM @jobsNames 

WHILE @counter <= @max 
BEGIN 
    SELECT @val1 = val1 ... FROM @jobNames where ID = @counter 
    -- .. do stuff 
    SET @counter = @counter + 1 
END 
3
declare @jobNames table(Id int, JobName nvarchar(100)) 

insert @jobNames values 
    (1, 'JobName1'), 
    (2, 'JobName2'), 
-- 
    (10, 'JobName10') 

while exists(select 1 from @jobNames) 
begin 
    declare @id int, @name nvarchar(100) 
    select top 1 @id = Id, @name = JobName from @jobNames 
    delete from @jobNames where Id = @Id 

    -- Do stuff here 
end