TSQL-如何迭代字符串列表

TSQL-如何迭代字符串列表,tsql,cursor,Tsql,Cursor,我想创建一个将我的所有作业插入数据库的过程。 A.我所有的工作都有相同的特点。BSSDT不支持作业代码管理 现在,我想创建一个脚本来插入它们,作为一个c开发者,我想我需要用它们的名字初始化一个列表 我在谷歌搜索时发现,这样做的方法是使用内存表,我能提供的最好的方法就是这个 declare @jobsNames table(Id int, JobName nvarchar(100)) insert into @jobsNames (Id,JobName) select 1,'JobNam

我想创建一个将我的所有作业插入数据库的过程。 A.我所有的工作都有相同的特点。BSSDT不支持作业代码管理

现在,我想创建一个脚本来插入它们,作为一个c开发者,我想我需要用它们的名字初始化一个列表

我在谷歌搜索时发现,这样做的方法是使用内存表,我能提供的最好的方法就是这个

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
问题-

这是最短的/推荐的路吗?
这似乎是foreach的一个很好的代码

就我个人而言,我避免像瘟疫一样的游标。请确保您必须进行迭代,而不是基于工作集。他们不是无缘无故的

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
似乎应该在@jobNames中插入,否则至少SQLServer会输出一个语法错误。
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