如何使用变量值作为表名创建一个永久表
问题描述:
我正在编写一个脚本来为我填充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
我猜没有其他办法。那么,我应该再次使用动态查询来执行SELECT语句? –
不,因为您无法通过变量指定表名,所以它已连接成动态SQL语句,然后执行 – AdaTheDev