使用动态变量名创建SQL表

时间:2010-05-25 15:03:02

标签: sql sql-server database tsql dynamic-sql

我想使用变量名创建备份SQL表。

的内容
DECLARE @SQLTable Varchar(20) 
SET @SQLTable = 'SomeTableName' + ' ' + '20100526' 
SELECT * INTO quotename(@SQLTable)
 FROM SomeTableName

但我正在

  

'@SQLTable'附近的语法不正确。

这只是维护小脚本的一部分所以我不必担心注射。

5 个答案:

答案 0 :(得分:16)

DECLARE @MyTableName nvarchar(20);
DECLARE @DynamicSQL nvarchar(1000);

SET @MyTableName = "FooTable";


SET @DynamicSQL = N'SELECT * INTO ' + @MyTableName + ' FROM BarTable';

EXEC(@DynamicSQL);

答案 1 :(得分:6)

不幸的是,您不能对表名,列名等使用绑定变量。在这种情况下,您必须生成动态SQL并使用exec

答案 2 :(得分:4)

DECLARE @Script NVARCHAR(MAX);
SET @Script = N'SELECT * INTO SomeTableName_' + N'20100526' + N' FROM SomeTableName';
EXEC sp_executesql @Script

我将日期分开,因为我假设您想为每次运行计算它。

答案 3 :(得分:4)

您应该考虑使用同义词:

- 在AdventureWorks2008R2中为Product表创建一个同义词。 创建SYNONYM MyProduct FOR AdventureWorks2008R2.Production.Product; GO

- 使用同义词查询Product表。 使用tempdb; 走 SELECT ProductID,Name 来自MyProduct WHERE ProductID< 5; GO

http://msdn.microsoft.com/en-us/library/ms177544.aspx

答案 4 :(得分:0)

DECLARE @MyTableName nvarchar(20);
DECLARE @DynamicSQL nvarchar(1000);

SET @MyTableName = "FooTable";


SET @DynamicSQL = N'SELECT * INTO ' + @MyTableName + ' FROM BarTable';

exec @DynamicSQL;

这个查询是正确的但只是在(“FooTable”)='FooTable'

上使用单引号