在ms-server 2005上工作。在我的存储过程中,我需要使用if语句,我已经尝试写但我失败了,我的语法如下:
Create Procedure TestProcedure
@Type int
as
SELECT * INTO #temp1 FROM (
if @Type =0
select * from dbo.Manifest
else
select * from dbo.DischargePort
) as b
执行上述语法后显示错误消息,消息为
Msg 156, Level 15, State 1, Procedure TestProcedure, Line 8
Incorrect syntax near the keyword 'if'.
Msg 170, Level 15, State 1, Procedure TestProcedure, Line 14
Line 14: Incorrect syntax near ')'.
如何解决问题,提前致谢。
答案 0 :(得分:3)
编辑好的,所以你不能实际插入#temptable两次,因为编译器没有重新验证它是否使用了if语句,最接近的解决方法如下:
IF @Type = 0
BEGIN
exec select * into #temp from dbo.Manifest
END
ELSE
BEGIN
select * into #temp from dbo.DischargePort
END
版本2
DECLARE @Type int = 0
IF @Type = 0
exec ('select * into ##temp from dbo.Manifest')
ELSE
exec ('select * into ##temp from dbo.DischargePort')
SELECT * FROM ##temp
然后记得把桌子放在最后
IF (SELECT object_id('TempDB..##temp')) IS NOT NULL
BEGIN
DROP TABLE ##temp
END
然后您将像普通表一样访问## temp。请记住,如果要向动态sql添加参数,请使用sp_exceutesql以避免sql注入
答案 1 :(得分:0)
你提醒最后放弃#temp。在创建表之前,您应该检查#temp是否已存在。
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #temp
CREATE TABLE #temp (id int)