我在存储过程中有以下的代码:
...
IF EXISTS (SELECT * FROM DEVICETOFILIALE WHERE CODE = @FILIALECODE)
SELECT @MODULEID = SMSDEVICEID FROM DEVICETOFILIALE WHERE CODE = @FILIALECODE 
SELECT CASE @MOBILETYPE
WHEN 'YD' THEN 'AND SIMCARDTYPE = 1'
WHEN 'LT' THEN 'AND SIMCARDTYPE = 2'
END SELECT
ELSE
SELECT @MODULEID = ''
...
目的是判断一下@MOBILETYPE,根据他的值不同在查询语句中加上不同的查询条件,上面这段代码应该怎么写?

解决方案 »

  1.   

    IF EXISTS (SELECT * FROM DEVICETOFILIALE WHERE CODE = @FILIALECODE) 
    BEGIN
        DECLARE @SQL NVARCHAR(4000)
        
        SET @SQL=N'SELECT @MODULEID = SMSDEVICEID FROM DEVICETOFILIALE WHERE CODE = '''+RTRIM(@FILIALECODE)+'''' 
                 +(CASE @MOBILETYPE 
                     WHEN  'YD' THEN N'AND SIMCARDTYPE = 1 ' 
                     WHEN  'LT' THEN N'AND SIMCARDTYPE = 2 ' 
                   END)  
        EXEC SP_EXECUTESQL @SQL,N'@MODULEID VARCHAR(20) OUT',@MODULEID OUT
    END
    ELSE 
        SELECT @MODULEID =  ' ' 
      

  2.   

    既然是在存储过程中。干脆就用if来判断好了
    比如:
    declare @sql varchar(8000)
    set @sql='IF EXISTS (SELECT * FROM DEVICETOFILIALE WHERE CODE = @FILIALECODE) 
    SELECT @MODULEID = SMSDEVICEID FROM DEVICETOFILIALE WHERE CODE = @FILIALECODE'
    if(@MOBILETYPE="YD")
    begin
         set @sql+=' AND SIMCARDTYPE = 1 '
    end
    else  if(MOBILETYPE="LT")
    begin
        set @sql+=' AND SIMCARDTYPE = 2 '
    end
    exec(@sql)
      

  3.   

    非常非常感谢!
    不过有一点不太清楚:
    EXEC SP_EXECUTESQL @SQL,N'@MODULEID VARCHAR(20) OUT',@MODULEID OUT
    这句的两个参数N'@MODULEID VARCHAR(20) OUT',@MODULEID OUT是什么意思?
      

  4.   

    2楼有心了,,@MODULEID OUT是输出参数,SQL语句执行的结果就放在@MODULEID中,不然你怎么得到结果