SQL Server 2008 - вставьте в таблицу сценарий выбора и жестко запрограммированное значение - PullRequest
0 голосов
/ 13 марта 2012

Я хочу вставить в таблицу следующую информацию:

Week                          NoTrans     Spend
02.01.12-08.01.12             11          520

У меня есть скрипт:

DECLARE @Week VARCHAR(22)
DECLARE @Date1 DATETIME
DECLARE @Date2 DATETIME
DECLARE @Script VARCHAR(8000)
SET @date1 = '02 Jan 2012'
SET @date2 = '08 Jan 2012'
SET @Week = Convert(varchar(12), @date1, 104)+'-'+Convert(varchar(12), @date2, 104)

PRINT @Week

SET @Script = 'INSERT INTO table2 (WEEK, NoTrans, Spend)
SELECT '+ @WEEK +', Transactions, Spend
FROM table1 (NOLOCK)


EXEC @Script

Столбец Week взят из @Week, а не из таблицы 1.

Я получаю следующее сообщение об ошибке:

Сообщение 203, Уровень 16, Состояние 2, Строка 20
Имя «Вставить в таблицу 2 (НЕДЕЛЯ, Транзакции, Потратить) ВЫБРАТЬ 02.01.2012-08.01.2012, Сделки, Провести FROM table1 (NOLOCK) 'не является допустимым идентификатором.

Спасибо

Ответы [ 2 ]

3 голосов
/ 13 марта 2012

Попробуйте изменить последнюю строку на:

EXEC sp_executesql @Script

Или, в качестве альтернативы, не беспокойтесь о создании @Script и использовании EXEC, просто запустите запрос следующим образом:

INSERT INTO table2 (WEEK, NoTrans, Spend)
SELECT @WEEK, Transactions, Spend
FROM table1 (NOLOCK)
1 голос
/ 13 марта 2012

Если вы хотите использовать EXECUTE для выполнения динамического SQL, вам нужно использовать круглые скобки:

 EXEC(@Script)

Также вы можете использовать sp_executesql, как предложено в другом ответе (оно имеет то преимущество, что позволяет параметризоватьзапросы).

Кроме того, я думаю, что вам нужно процитировать строку для WEEK:

SET @Script = 'INSERT INTO table2 (WEEK, NoTrans, Spend)
SELECT '''+ @WEEK +''', Transactions, Spend
FROM table1'

PS: Убедитесь, что вы понимаете, что подразумевается при использовании NOLOCK:

http://blogs.msdn.com/b/davidlean/archive/2009/04/06/sql-server-nolock-hint-other-poor-ideas.aspx

...