当前位置: 代码迷 >> Sql Server >> case语句
  详细解决方案

case语句

热度:127   发布时间:2016-04-27 19:31:25.0
求一个case语句
我在存储过程中有以下的代码:
...
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 = ''
...
[email protected][email protected]?,上面这段代码应该怎么写?

------解决方案--------------------
SQL code
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,[email protected] VARCHAR(20) OUT',@MODULEID OUTENDELSE     SELECT @MODULEID =  ' '
------解决方案--------------------
既然是在存储过程中。干脆就用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)

------解决方案--------------------
2楼有心了,,@MODULEID OUT是输出参数,[email protected],不然你怎么得到结果
  相关解决方案