表名为变量

表名为变量

我正在尝试执行以下查询:

declare @tablename varchar(50)set @tablename = 'test'select * from @tablename

这会产生以下错误:

MSG 1087,16级,状态1,第5行

必须声明表变量“@tablename”。

动态填充表名的正确方法是什么?


慕后森
浏览 706回答 3
3回答

喵喵时光机

如果查询是静态的,则表名和列名需要是静态的。对于动态表或列名,应该动态生成完整的SQL,并使用sp_Executesql执行它。这里有更多细节:动态SQL的诅咒与祝福

红颜莎娜

将最后一条语句更改为:EXEC('SELECT * FROM ' + @tablename)这就是我在存储过程中所做的工作。第一个块将声明变量,并根据当前年份和月份名称设置表名,在本例中是test_2012OCTOBER。然后,我检查它是否已经存在于DB中,如果已经存在,则删除它。然后,下一个块将使用SELECT INTO语句来创建该表,并使用来自另一个表的带有参数的记录填充它。--DECLARE TABLE NAME VARIABLE DYNAMICALLYDECLARE @table_name varchar(max)SET @table_name =      (SELECT 'TEST_'             + DATENAME(YEAR,GETDATE())             + UPPER(DATENAME(MONTH,GETDATE())) )--DROP THE TABLE IF IT ALREADY EXISTSIF EXISTS(SELECT name            FROM sysobjects            WHERE name = @table_name AND xtype = 'U')BEGIN     EXEC('drop table ' +  @table_name)END--CREATES TABLE FROM DYNAMIC VARIABLE AND INSERTS ROWS FROM ANOTHER TABLEEXEC('SELECT * INTO '      + @table_name + ' FROM dbo.MASTER WHERE STATUS_CD = ''A''')

胡子哥哥

不能为变量使用表名,只能这样做:DECLARE @sqlCommand varchar(1000)SET @sqlCommand = 'SELECT * from yourtable'EXEC (@sqlCommand)
打开App,查看更多内容
随时随地看视频慕课网APP