使用变量创建表作为表名

时间:2017-07-20 07:59:11

标签: sql-server tsql sql-server-2012

我需要创建一个表,其中名称将是4个变量和一些字符串的值。

我发现了各种各样的问题/答案,但没有任何真正符合我之后的问题。最终,这将用作eForm上的嵌入式SQL,但目前我试图直接在MS SQL Server Management Studio中实现这一点。

这就是我所拥有的:

DECLARE @INSFIRSTNAME VARCHAR (100) = 'Ted'
DECLARE @INSSURNAME VARCHAR (100) = 'Smith'
DECLARE @INSSTAFFNO VARCHAR (10) = 'AB123'
DECLARE @INSYEAR VARCHAR (10) = '2018'
DECLARE @TABLENAME VARCHAR (400) = 'Timesheet_' + @INSFIRSTNAME + @INSSURNAME + @INSSTAFFNO + '_' + @INSYEAR

CREATE TABLE @TABLENAME
             (INSFIRSTNAME VARCHAR (100),
              INSSURNAME VARCHAR (100),
              INSSTAFFNO VARCHAR (10),
              INSYEAR VARCHAR (10));
INSERT INTO   @TABLENAME
              (INSFIRSTNAME, INSSURNAME, INSSTAFFNO, INSYEAR)
VALUES        (@INSFIRSTNAME, @INSSURNAME, @INSSTAFFNO, @INSYEAR)

这会抛出消息:

  

"' @ TABLENAME'附近的语法不正确。

我尝试了各种填充TABLENAME变量的方法,但没有任何效果。从我所读的动态SQL似乎是答案,但我还没有找到实现这一目标的方法。任何帮助将非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以像这样使用动态查询:

DECLARE @sql VARCHAR(MAX)
SET @sql = 'CREATE TABLE ' + @TABLENAME + ' THE REST OF YOUR QUERY' 
Exec @sql
SET @sql = 'INSERT INTO ' + @TABLENAME + ' THE REST OF YOUR QUERY' 
Exec @sql

不好,但有效。

答案 1 :(得分:0)

您可以使用动态TSQL:

DECLARE @INSFIRSTNAME VARCHAR (100) = 'Ted'
DECLARE @INSSURNAME VARCHAR (100) = 'Smith'
DECLARE @INSSTAFFNO VARCHAR (10) = 'AB123'
DECLARE @INSYEAR VARCHAR (10) = '2018'
DECLARE @TABLENAME VARCHAR (400) = 'Timesheet_' + @INSFIRSTNAME + @INSSURNAME + @INSSTAFFNO + '_' + @INSYEAR

--declare a variable that will hold your query
declare @sql_create nvarchar(max)

--create the query concatenating DDL instructions and variables
set @sql_create=''
set @sql_create= @sql_create + 'CREATE TABLE ' + @TABLENAME 
set @sql_create= @sql_create + ' (INSFIRSTNAME VARCHAR (100),'
set @sql_create= @sql_create + '  INSSURNAME VARCHAR (100),'
set @sql_create= @sql_create + '  INSSTAFFNO VARCHAR (10),'
set @sql_create= @sql_create + '  INSYEAR VARCHAR (10));'

set @sql_create= @sql_create + ' INSERT INTO ' + @TABLENAME
set @sql_create= @sql_create + '               (INSFIRSTNAME, INSSURNAME, INSSTAFFNO, INSYEAR)'
set @sql_create= @sql_create + ' VALUES        ('''+@INSFIRSTNAME+''','''+ @INSSURNAME + ''','''+ @INSSTAFFNO+ ''',''' + @INSYEAR + ''')'

--execute the query contained inside the variable
exec sp_executesql  @sql_create

现在您可以从表中选择:

enter image description here