34,590
社区成员
发帖
与我相关
我的任务
分享
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
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多判断要快(有待查证)