--1. 不用链接服务器,无问题
DECLARE @i INT
SET @i=100
SELECT TOP 1
CASE
WHEN @i=100 THEN 1
WHEN @i=200 THEN 2
WHEN @i=300 THEN 3
WHEN @i=400 THEN 4
WHEN @i=500 THEN 5
WHEN @i=600 THEN 6
WHEN @i=700 THEN 7
WHEN @i=800 THEN 8
WHEN @i=900 THEN 9
WHEN @i=1000 THEN 10
WHEN @i=1100 THEN 11
END
FROM [master].sys.objects
--2. 链接服务器,有问题
/*
DECLARE @i INT
SET @i=100
SELECT TOP 1
CASE
WHEN @i=100 THEN 1
WHEN @i=200 THEN 2
WHEN @i=300 THEN 3
WHEN @i=400 THEN 4
WHEN @i=500 THEN 5
WHEN @i=600 THEN 6
WHEN @i=700 THEN 7
WHEN @i=800 THEN 8
WHEN @i=900 THEN 9
WHEN @i=1000 THEN 10
WHEN @i=1100 THEN 11
WHEN @i=1200 THEN 12
END
FROM [db2].[master].sys.objects
*/
/*
消息 8180,级别 16,状态 1,第 22 行
无法预定义语句。
消息 125,级别 15,状态 4,第 22 行
Case 表达式只能嵌套到 10 层。
*/
--3. 解决
DECLARE @i INT
DECLARE @t TABLE ( [type] INT, result INT)
INSERT INTO @t VALUES (100,1)
INSERT INTO @t VALUES(200,2)
INSERT INTO @t VALUES(300,3)
INSERT INTO @t VALUES(400,4)
INSERT INTO @t values(500,5)
INSERT INTO @t values(600,6)
INSERT INTO @t values(700,7)
INSERT INTO @t values(800,8)
INSERT INTO @t values(900,9)
INSERT INTO @t values(1000,10)
INSERT INTO @t values(1100,11)
SET @i=100
SELECT TOP 1 (SELECT result FROM @t A WHERE a.type=@i) AS r
FROM [db2].[master].sys.objects
SQL Server: 解决链接服务器中 CASE WHEN 不能超过10级
最新推荐文章于 2023-06-20 15:05:49 发布