SQL里的逻辑求助

秋圈圈 2017-02-22 06:04:31
DECLARE @BoxKey1Add INT = 0,@BoxKey2Add INT = 0,@BoxKey3Add INT = 0,@BoxKey4Add INT = 0,@BoxKey5Add INT = 0,@LuckboxNumAdd INT = 0;


IF @TypeID = 1
BEGIN
SET @BoxKey1Add = 1
END
ELSE IF @TypeID = 2
BEGIN
SET @BoxKey2Add = 1
END
ELSE IF @TypeID = 3
BEGIN
SET @BoxKey3Add = 1
END
ELSE IF @TypeID = 4
BEGIN
SET @BoxKey4Add = 1
END
ELSE IF @TypeID = 5
BEGIN
SET @BoxKey5Add = 1
END
ELSE IF @TypeID = 6
BEGIN
SET @LuckboxNumAdd = 1
END


@TypeID是传入的参数 ,
我的写法连自己都看不下去了,
还有什么更好的写法吗
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 2017-02-23
  • 打赏
  • 举报
回复
换种动态写法可以用case when
DECLARE @TypeID INT = 1 ,
    @str NVARCHAR(100)
SET @str = 'DECLARE @t1 int, @t2 int '

SELECT  @str += ( CASE @TypeID
                    WHEN 1 THEN 'set @t1 = 1'
                    ELSE 'set @t2 = 1'
                  END )

EXEC(@str)
如果不这样写,可以参考这个。 http://stackoverflow.com/questions/19301323/sql-case-expression-setting-values-of-local-variables 另外写程序的时候switch要比if多判断要效率高(但空间占用较大),所以我觉得case when可能会比if多判断要快(有待查证)
卖水果的net 版主 2017-02-23
  • 打赏
  • 举报
回复
忽略 2#吧,在手机上没清,你是多个变量; 参考 3# ;
秋圈圈 2017-02-23
  • 打赏
  • 举报
回复
谢谢大神们~
二月十六 2017-02-22
  • 打赏
  • 举报
回复
用case when可以。 但是你想干什么,声明一个变量不能实现吗?
Andy-W 2017-02-22
  • 打赏
  • 举报
回复
DECLARE @BoxKey1Add INT = 0,@BoxKey2Add INT = 0,@BoxKey3Add INT = 0,@BoxKey4Add INT = 0,@BoxKey5Add INT = 0,@LuckboxNumAdd INT = 0; IF @TypeID = 1 set @BoxKey1Add=1 IF @TypeID = 2 set @BoxKey2Add=1 IF @TypeID = 3 set @BoxKey3Add=1 IF @TypeID = 4 set @BoxKey4Add=1 IF @TypeID = 5 set @BoxKey5Add=1 IF @TypeID = 6 set @LuckboxNumAdd=1 这样就可以了,性能没影响
卖水果的net 版主 2017-02-22
  • 打赏
  • 举报
回复
使用case when 吧,很适合你现在的场景。
秋圈圈 2017-02-22
  • 打赏
  • 举报
回复
请教各位大神

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧