2015-03-16 2 views
0

У меня есть простой запрос:Итерация в отчетливом списке и вставке значений в другую таблицу

select distinct USERS from [USER_TABLE] 

возвращает что-то вроде

Thunder Cat 
He Man 

То, что я хочу, чтобы пройти по этому списку и вставить его в другой таблице:

User 1: Thunder Cat 
User 2: He Man 

Я пытаюсь в apporoach так:

declare @i int = 1; 
while (select distinct [USER] from [USER_TABLE]) > 0 
begin 
    exec dbo.audit_log concat('User ', @i), 'test'; 
end 

(где audit_log хранимая процедура для вставки строк в logtable)

Это, однако, дает мне ошибку: Incorrect syntax near 'User '.

  1. Что я делаю неправильно?
  2. Это лучший способ приблизиться к этому?
+3

Почему бы не просто Вставить строки прямо в новый стол? Зачем вам это делать по очереди? –

+0

Что сказал @RhysJones. Но если вы действительно (как ДЕЙСТВИТЕЛЬНО ДЕЙСТВИТЕЛЬНО), нужно сделать это по одному. Вам придется использовать курсоры. –

+0

Или просто возьмите код из __dbo.audit_log__ sp и добавьте, чтобы использовать всю таблицу пользователей. – Darka

ответ

2

Вам понадобится выполнить цикл в вашем наборе данных. Попробуйте это:

DECLARE @Table TABLE 
     (
      [Row_Num] INT IDENTITY(1,1), 
      [Users] VARCHAR(100) 
     ); 

INSERT INTO @Table 
     SELECT DISTINCT [USERS] 
     FROM [User_Table] 

DECLARE @loopCounter INT = 1, 
     @LastRowNum INT = (SELECT COUNT(*) FROM @Table), 
     @user VARCHAR(100); 

WHILE (@loopCounter <= @LastRowNum) 
BEGIN 
    SET @user = (SELECT [Users] FROM @Table WHERE Row_Num = @loopCounter); 
    EXEC dbo.audit_log @user,' test'; 
    SET @loopCounter = @loopCounter + 1; 
END 
Смежные вопросы