SQL IF 和 ELSE 块,里面有临时表

SQL IF and ELSE block with temp tables inside

我对 CTEstemp 表进行了相当大的查询,我想将其放入 IFELSE 块中,以适应不同的条件对于他们两个,取决于参数。简化后如下所示:

DECLARE @parameter varchar(15)

If(OBJECT_ID('tempdb..#table1') Is Not Null)
Begin
    Drop Table #table1
End
create table #table1
(
column1
column2
column3
)

If(OBJECT_ID('tempdb..#table2') Is Not Null)
Begin
    Drop Table #table2
End
create table #table2
(
column1
column2
column3
)

IF @parameter = 'Option1' BEGIN
select * from (

INSERT INTO #table1
select * from... where 'condition_for_Option1'
INSERT INTO #table2
select * from... where 'condition_for_Option1'

select * from #table1
union all
select * from #table2) as DATA
  END ELSE

IF @parameter = 'Option2' BEGIN
SELECT *
FROM
(
INSERT INTO #table1
select * from... where 'condition_for_Option2'
INSERT INTO #table2
select * from... where 'condition_for_Option2'

select * from #table1
union all
select * from #table2)
as DATA
  END 

我把 #temp 表放在开头并修复了部分问题,但我仍然得到:

Msg 156, Level 15, State 1, Line 31
Incorrect syntax near the keyword 'INSERT'.
Msg 102, Level 15, State 1, Line 37
Incorrect syntax near ')'.
Msg 156, Level 15, State 1, Line 48
Incorrect syntax near the keyword 'INSERT'.
Msg 102, Level 15, State 1, Line 54
Incorrect syntax near ')'.

有什么方法可以使它起作用吗?

为什么不是这个?

IF @parameter = 'Option1' BEGIN

INSERT INTO #table1
select * from... where 'condition_for_Option1'
INSERT INTO #table2
select * from... where 'condition_for_Option1'

select * from (

select * from #table1
union all
select * from #table2) as DATA
END 
ELSE

IF @parameter = 'Option2' BEGIN

INSERT INTO #table1
select * from... where 'condition_for_Option2'
INSERT INTO #table2
select * from... where 'condition_for_Option2'
SELECT *
FROM
(
select * from #table1
union all
select * from #table2)
as DATA
END 

您不能在 select 语句中包含 insert 语句。实际上你可以重写:

IF @parameter = 'Option1' 
BEGIN

    INSERT INTO #table1
    SELECT * FROM... WHERE 'condition_for_Option1'
    INSERT INTO #table2
    SELECT * FROM... WHERE 'condition_for_Option1'

    SELECT * FROM #table1
    UNION ALL
    SELECT * FROM #table2

END 

ELSE IF @parameter = 'Option2' 
BEGIN

    INSERT INTO #table1
    SELECT * FROM... WHERE 'condition_for_Option2'
    INSERT INTO #table2
    SELECT * FROM... WHERE 'condition_for_Option2'

    SELECT * FROM #table1
    UNION ALL
    SELECT * FROM #table2

END 

但是我在这里看不到 temp table 的任何用法,所以你可以重写:

IF @parameter = 'Option1' 
BEGIN

    SELECT * FROM... WHERE 'condition_for_Option1'
    UNION ALL
    SELECT * FROM... WHERE 'condition_for_Option1'

END 

ELSE IF @parameter = 'Option2' 
BEGIN

    SELECT * FROM... WHERE 'condition_for_Option2'
    UNION ALL
    SELECT * FROM... WHERE 'condition_for_Option2'

END