簡體   English   中英

使用動態變量名創建 SQL 表

[英]Creating SQL table using dynamic variable name

我想使用變量名創建備份 SQL 表。

類似的東西

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

但我得到

'@SQLTable' 附近的語法不正確。

它只是維護的一個小腳本的一部分,所以我不必擔心注射。

DECLARE @MyTableName sysname;
DECLARE @DynamicSQL nvarchar(max);

SET @MyTableName = 'FooTable';


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

EXEC sp_executesql @DynamicSQL;

不幸的是,您不能對表名、列名等使用綁定變量。在這種情況下,您必須生成動態 SQL 並使用exec

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

我把日期分開了,因為我假設你想為每次運行計算它。

您應該考慮使用同義詞:

-- 在 AdventureWorks2008R2 中為 Product 表創建同義詞。 為 AdventureWorks2008R2.Production.Product 創建同義詞 MyProduct;

-- 使用同義詞查詢Product表。 使用臨時數據庫; GO SELECT ProductID, Name FROM MyProduct WHERE ProductID < 5;

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

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

SET @MyTableName = "FooTable";


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

exec @DynamicSQL;

此查詢是正確的,但只需在 ("FooTable")='FooTable' 處使用單引號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM