2013-08-22 2 views
2

Я хочу создать процедуру, которая будет вставлять все мои задания в БД.
(а. Все мои работы имеют равные характеристики. Б. SSDT оленья кожа поддержки работы управления кодом)TSQL - как перебирать список строк

Теперь, я думал, чтобы создать сценарий для вставки всех из них и, как ас # 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 

Вопрос -

Это самый короткий/Рекомендован путь?
(Кажется, код hellotof для foreach)

ответ

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 
Смежные вопросы