我需要创建一个表,其中名称将是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似乎是答案,但我还没有找到实现这一目标的方法。任何帮助将非常感谢。
答案 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
现在您可以从表中选择: