2012-05-02 4 views
2

У меня есть таблицаВыполнить SQL строку и вставить результат в таблицу

DECLARE @Results TABLE(QueryIndex smallint, FieldValue nvarchar(50)) 

QueryIndex является счетчиком цикла, он будет получать значение из @QueryIndex. FieldValue получит значение из другой строки SQL. По какой-то причине мне нужно динамически выполнить строку SQL.

SET @SQL = "SELECT " + @FieldName + " FROM MyView" 
      + " WHERE Condition1='" + @Value1 + "'" 
      + " AND Condition2=" + CONVERT(nvarchar(12),@Value2) 

Теперь я пытаюсь вставить данные в @Results

NSERT INTO @Results(QueryIndex, FieldValue) 
SELECT @QueryIndex, EXEC (@SQL) 

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

QueryIndex FieldName 
    1   First 
    2   Second 
    3   Third 

Спасибо.

ответ

3

Вы должны сочетать извлечение @QueryIndex с выбора, то вы можете просто

SET @SQL = 'SELECT ' + cast(@QueryIndex as varchar(16)) + ',' + @FieldName + ... 
INSERT INTO @Results(QueryIndex, FieldValue) 
    EXEC (@SQL) 
+0

спасибо большое, он отлично работает с этим решением. – Shinigamae

1

вы должны создать структуру таблицы, содержащей таблицу - раньше!

CREATE TABLE #tmp // or @tbl... doesnt really matter... 
     ( 
     ... 
    ) 

    INSERT INTO #tmp -- if we use exec we must have the pre-Structure of the table 
    EXEC (@sql) 

теперь делать WAHT, что вы хотите сделать с #tmp ....

+0

'#tmp 'или' @ tbl' может иметь значение - '@ tmp' не всегда может быть целью insert/exec (хотя я честно забываю, когда это изменилось). –

+0

@ Royi Namir спасибо за предложение. Но я думаю, что это не решение для моего дела. Как решение Alex, я просто хочу вставить 2 значения одновременно. Там не так много отличается от использования таблицы temp и использования таблицы var здесь :) – Shinigamae