Sql 如何利用if语句的结果

Sql 如何利用if语句的结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,我这里有三张清单。如果要对列表1和3或列表2和3进行条件组合,在使用以下代码时似乎还可以 declare @Condition varchar(10) = NULL if @Condition IS NULL select * from List1 else select * from List2 union select * from List3 但是,如果我想通过将最终结果插入表来存储它们,它将返回If语句的语法错误。有更好的办法吗 declare @Conditio

我这里有三张清单。如果要对列表1和3或列表2和3进行条件组合,在使用以下代码时似乎还可以

declare @Condition varchar(10) = NULL

if @Condition IS NULL
    select * from List1
else 
    select * from List2
union 
select * from List3
但是,如果我想通过将最终结果插入表来存储它们,它将返回If语句的语法错误。有更好的办法吗

declare @Condition varchar(10) = NULL

declare @CombiList table (Value varchar(10))
insert into @CombiList

if @Condition IS NULL
    select * from List1
else 
    select * from List2
union 
select * from List3

您需要为每个条件创建两个单独的
INSERT
语句:

if @Condition IS NULL
    insert into @CombiList
        select * from List1
else 
    insert into @CombiList
        select * from List2
        union 
        select * from List3

您需要为每个条件创建两个单独的
INSERT
语句:

if @Condition IS NULL
    insert into @CombiList
        select * from List1
else 
    insert into @CombiList
        select * from List2
        union 
        select * from List3
像这样

INSERT INTO @CombiList
SELECT *
FROM   list1
WHERE  @Condition IS NULL
UNION
SELECT *
FROM   List2
WHERE  @Condition IS NOT NULL
UNION
SELECT *
FROM   List3
WHERE  @Condition IS NOT NULL
像这样

INSERT INTO @CombiList
SELECT *
FROM   list1
WHERE  @Condition IS NULL
UNION
SELECT *
FROM   List2
WHERE  @Condition IS NOT NULL
UNION
SELECT *
FROM   List3
WHERE  @Condition IS NOT NULL

如果您真正的问题涉及更复杂的语句,并且代码可以包装在存储过程中,那么构建和执行动态
T-SQL
语句可以降低代码的复杂性

例如:

DECLARE @DynamicTSQLStatement NVARCHAR(MAX);

...

-- some statements that are executing always
SET @DynamicTSQLStatement = '....'

-- conditions

IF ... 
   SET @DynamicTSQLStatement = @DynamicTSQLStatement + '.....'
ELSE
   ...
   SET @DynamicTSQLStatement = @DynamicTSQLStatement + '.....'

EXEC sp_executesql @DynamicTSQLStatement

如果您真正的问题涉及更复杂的语句,并且代码可以包装在存储过程中,那么构建和执行动态
T-SQL
语句可以降低代码的复杂性

例如:

DECLARE @DynamicTSQLStatement NVARCHAR(MAX);

...

-- some statements that are executing always
SET @DynamicTSQLStatement = '....'

-- conditions

IF ... 
   SET @DynamicTSQLStatement = @DynamicTSQLStatement + '.....'
ELSE
   ...
   SET @DynamicTSQLStatement = @DynamicTSQLStatement + '.....'

EXEC sp_executesql @DynamicTSQLStatement

您需要创建两个独立的
INSERT
语句您需要创建两个独立的
INSERT
语句