Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL动态表插入SQL Server_Sql_Sql Server_Dynamic_Sql Insert - Fatal编程技术网

SQL动态表插入SQL Server

SQL动态表插入SQL Server,sql,sql-server,dynamic,sql-insert,Sql,Sql Server,Dynamic,Sql Insert,我有一个向数据库推送发送变量的进程。根据1个变量,表名将更改为推送信息的位置 即表A有3列,表B有3列。我尝试使用IIF进行动态插入,如下所示: DECLARE @TableName VARCHAR(100) SET @TableName = (SELECT IIF(${@var1}$ = 'A', 'TABLE_A', 'Table_B')) SELECT @TableName INSERT INTO @TableName (Var2_Name, Created_Date, Deleted

我有一个向数据库推送发送变量的进程。根据1个变量,表名将更改为推送信息的位置

即表A有3列,表B有3列。我尝试使用
IIF
进行动态插入,如下所示:

DECLARE @TableName VARCHAR(100)
SET @TableName = (SELECT IIF(${@var1}$ = 'A', 'TABLE_A', 'Table_B'))

SELECT @TableName

INSERT INTO @TableName (Var2_Name, Created_Date, Deleted_Date) 
VALUES (@Var2, getutcdate(), getutcdate());
第一个
SELECT@TableName
向我显示
IIF
的值,但是当我尝试在insert中使用它时,它失败了,并显示

必须声明表变量@TableName


是否有一种方法可以让它在插入时识别表名,或者有另一种方法可以进行动态插入。

如果查询是静态的,那么表和列的名称也必须是静态的

对于动态表或列名,您应该动态生成完整的SQL,并使用
sp_executesql
执行它

像这样的东西应该可以做到,如果我犯了语法错误,很抱歉,是动态编码的

DECLARE @TableName varchar(100) = (SELECT IIF(${@var1}$ = 'A', 'TABLE_A', 'Table_B'))

SELECT @sql = 
N 'INSERT INTO ' + @TableName + '(Var2_Name, Created_Date, Deleted_Date) ' + 
N 'VALUES (' + @Var2 + ', getutcdate(), getutcdate())'

EXEC sp_executesql @sql

如果查询是静态的,那么表和列的名称也必须是静态的

对于动态表或列名,您应该动态生成完整的SQL,并使用
sp_executesql
执行它

像这样的东西应该可以做到,如果我犯了语法错误,很抱歉,是动态编码的

DECLARE @TableName varchar(100) = (SELECT IIF(${@var1}$ = 'A', 'TABLE_A', 'Table_B'))

SELECT @sql = 
N 'INSERT INTO ' + @TableName + '(Var2_Name, Created_Date, Deleted_Date) ' + 
N 'VALUES (' + @Var2 + ', getutcdate(), getutcdate())'

EXEC sp_executesql @sql
你可以插入两个

insert into TABLE_A select @Var2, getutcdate(), getutcdate() where @var1 = 'A'
insert into Table_b select @Var2, getutcdate(), getutcdate() where @var1 = 'B'
…或使用条件,您的案例不需要动态sql,例如:

if (@var1 = 'A')
    insert into Table_A ....
else
    insert into Table_B ....
你可以插入两个

insert into TABLE_A select @Var2, getutcdate(), getutcdate() where @var1 = 'A'
insert into Table_b select @Var2, getutcdate(), getutcdate() where @var1 = 'B'
…或使用条件,您的案例不需要动态sql,例如:

if (@var1 = 'A')
    insert into Table_A ....
else
    insert into Table_B ....

这是比生成完整动态SQL字符串更好的选项。这是比生成完整动态SQL字符串更好的选项。