如何使用变量值作为表名创建一个永久表

问题描述:

我正在编写一个脚本来为我填充SQL Server中的测试数据。我有5个存储过程。第一个存储过程生成ITEM,其他存储过程使用这些新创建的ITEM创建销售订单。如何使用变量值作为表名创建一个永久表

我不想解释所有细节,不打扰你,所以我想问你,我怎样才能创建一个名称与使用变量的值作为表名称的永久表。但我不想创建TABLE VARIABLE或TEMP TABLE,因为我无法从其他存储过程调用它们。

这里就是我试图做...

DECLARE @TABLENAME NVARCHAR(50) 
SET @TABLENAME = 'TABLE_ITEM_1' 

CREATE TABLE @TABLENAME 
(
    ID INT, 
    NAME NVARCHAR(50) 
) 

然后,我将创建TABLE_ITEM_2,TABLE_ITEM_3等等...

有没有方法来创建一个表像我解释?

使用动态查询。它是最好的选择

DECLARE @TABLENAME NVARCHAR(50) 
DECLARE @QryStr VARCHAR(MAX) 
SET @TABLENAME = 'TABLE_ITEM_1' 

SET @QryStr = ' 
CREATE TABLE '[email protected]+' 
(
ID INT, 
NAME NVARCHAR(50) 
)' 

EXEC(@QryStr) 

你将不得不使用动态SQL。

DECLARE @TABLENAME NVARCHAR(50) 
SET @TABLENAME = 'TABLE_ITEM_1' 

DECLARE @SQL NVARCHAR(1000) 
SET @SQL = 'CREATE TABLE ' + QUOTENAME(@TABLENAME) + ' 
(
ID INT, 
NAME NVARCHAR(50) 
)' 
EXECUTE sp_executesql @SQL 
+0

我猜没有其他办法。那么,我应该再次使用动态查询来执行SELECT语句? –

+0

不,因为您无法通过变量指定表名,所以它已连接成动态SQL语句,然后执行 – AdaTheDev