SQL Server 2008 - 使用select脚本和硬编码值插入表中

时间:2012-03-12 23:35:00

标签: sql-server-2008 select insert-into

我想在表格中插入以下信息:

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)'不是有效的标识符。

由于

2 个答案:

答案 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