crux sql if语句问题

时间:2011-04-18 10:50:47

标签: sql sql-server sql-server-2005 stored-procedures

在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 ')'.

如何解决问题,提前致谢。

2 个答案:

答案 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)