【发布时间】:2015-04-09 16:34:41
【问题描述】:
我正在创建一个存储过程,并在其中创建一个新表,该表在创建时将两个变量、一个 ID 和 getdate() 附加到表名。即表名_@id_getdate()。所以表名将根据哪个 id 和它运行的日期而改变。我正在使用动态 SQL 执行此操作。然后在创建表之后,我需要从该过程之前创建的临时表中插入记录。(未显示)。由于在创建表之前我不会知道表的名称,因此我尝试使用 @tablename 变量插入。
我尝试了以下脚本并收到此错误: 消息 1087,第 16 层,状态 1,第 25 行 必须声明表变量“@TABLENAME”。
此过程将每隔一天左右运行一次,运行的受影响记录将存储在存储过程执行期间创建的 tablename_@id_getdate() 表中。
还有其他方法可以做到这一点,还是我的语法错误?谢谢你的帮助。
IF EXISTS (SELECT 1 FROM #DUPS2)
BEGIN
DECLARE @TableName NVARCHAR(128)
DECLARE @SQLString NVARCHAR(MAX)
,@DATE VARCHAR (10)
,@BN SMALLINT
SET @BN = 108
SET @DATE = CONVERT(VARCHAR(10),GETDATE(),112)
SET @TABLENAME = 'schema.dbo.tableName_' + CAST (@BN AS VARCHAR) +'_'+ @DATE
SET @SQLString = 'CREATE TABLE '+' '+@TABLENAME+ ' '
+ '( ' + 'BUSINESS_NAME' + ' ' +'VARCHAR(120)' +' '+'NULL,' +
'CLAIM_ID' + ' ' +'NVARCHAR(120)' +' '+'NULL,' +
'CONTACT_ID' + ' ' +'INT' +' '+'NULL,' +
'COUNT_OF_DUPES' + ' ' +'NVARCHAR(5)' +' '+'NULL' +') ON [PRIMARY] '
EXEC @SQLString
---TABLE IS CREATED AND NOW WE INSERT RECORDS TO IT
INSERT INTO @TABLENAME --the table name just created.
SELECT D.*
FROM #DUPS2 D --contains duplicate contact records found
JOIN TABLE1 T1 WITH (NOLOCK)
ON D.CONTACT_ID = T1.CONTACT_ID
WHERE T1. active_ind = 1
END
【问题讨论】:
-
您不能在
insert中使用变量作为表名。您也必须动态构建该查询。
标签: sql sql-server-2008 stored-procedures