我想在表格中插入以下信息:
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
而不是table1。
我收到以下错误消息:
Msg 203,Level 16,State 2,Line 20
名称'INSERT INTO table2(WEEK,Transactions,Spend) 选择02.01.2012-08.01.2012,交易,支出 FROM table1(NOLOCK)'不是有效的标识符。
由于
答案 0 :(得分:3)
尝试将最后一行更改为:
EXEC sp_executesql @Script
或者,不要为创建@Script和使用EXEC而烦恼,只需运行如下查询:
INSERT INTO table2 (WEEK, NoTrans, Spend)
SELECT @WEEK, Transactions, Spend
FROM table1 (NOLOCK)
答案 1 :(得分:1)
如果要使用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