有没有办法在带有条件的 INSERT INTO 子句中选择 table ?
Is there a way to choose a table in an INSERT INTO clause with a conditional?
我有两个table,我们可以称它们为table1和table2,还有一个变量来确定要插入哪个table。我想做这样的事情:
DECLARE @intoTable2 BIT = 0;
INSERT INTO
IF @intoTable2 = 1
table2
ELSE
table1
--put column names and values here...
两个 table 之间的所有列名都相同,除了第一个,所以我还需要为第一列提供相应的 IF
语句。 (我可以只写出两个 INSERT INTO
语句并将它们包装在一个 IF-ELSE
子句中,但是有很多列名称,我只是想避免它太笨重。
but there are a lot of column names, and I'm just trying to keep it from being too clunky.
在 TSQL 中并不总是可以避免剪切和粘贴。将长列列表保持在一行以启用剪切和粘贴,而不是浪费垂直 space
在 TSQL 中,INSERT 将在 IF 之后出现。
DECLARE @intoTable2 BIT = 0;
IF @intoTable2 = 1
BEGIN
INSERT INTO table2 ( ... )
values ( ... );
END
ELSE
BEGIN
INSERT INTO table2 ( ... )
values ( ... );
END
或者您可以使用动态 sql
declare @sql = concat(N'insert into ', case when @intoTable2 = 0 then 'table1' else 'table2' end, ' values ...')
--print(@sql)
exec (@sql)
我有两个table,我们可以称它们为table1和table2,还有一个变量来确定要插入哪个table。我想做这样的事情:
DECLARE @intoTable2 BIT = 0;
INSERT INTO
IF @intoTable2 = 1
table2
ELSE
table1
--put column names and values here...
两个 table 之间的所有列名都相同,除了第一个,所以我还需要为第一列提供相应的 IF
语句。 (我可以只写出两个 INSERT INTO
语句并将它们包装在一个 IF-ELSE
子句中,但是有很多列名称,我只是想避免它太笨重。
but there are a lot of column names, and I'm just trying to keep it from being too clunky.
在 TSQL 中并不总是可以避免剪切和粘贴。将长列列表保持在一行以启用剪切和粘贴,而不是浪费垂直 space
在 TSQL 中,INSERT 将在 IF 之后出现。
DECLARE @intoTable2 BIT = 0;
IF @intoTable2 = 1
BEGIN
INSERT INTO table2 ( ... )
values ( ... );
END
ELSE
BEGIN
INSERT INTO table2 ( ... )
values ( ... );
END
或者您可以使用动态 sql
declare @sql = concat(N'insert into ', case when @intoTable2 = 0 then 'table1' else 'table2' end, ' values ...')
--print(@sql)
exec (@sql)