SQL IF 和 ELSE 块,里面有临时表
SQL IF and ELSE block with temp tables inside
我对 CTEs
、temp
表进行了相当大的查询,我想将其放入 IF
和 ELSE
块中,以适应不同的条件对于他们两个,取决于参数。简化后如下所示:
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
我对 CTEs
、temp
表进行了相当大的查询,我想将其放入 IF
和 ELSE
块中,以适应不同的条件对于他们两个,取决于参数。简化后如下所示:
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