SQL Server: 解决链接服务器中 CASE WHEN 不能超过10级

--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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在SQL Server,可以使用CASE WHEN语句来实现条件判断和返回不同的结果。CASE语句有两种格式,简单CASE函数和CASE搜索函数。简单CASE函数的格式是在CASE关键字后面跟上要判断的列名,然后使用WHEN关键字和条件值进行判断,再使用THEN关键字和对应的选项值进行返回,最后使用ELSE关键字和默认值进行结束。例如,可以使用简单CASE函数来根据job_level字段的值返回不同的结果。\[1\] 引用\[2\]:另一种格式是CASE搜索函数,它的格式是在CASE关键字后面直写上条件判断式,然后使用WHEN关键字和条件值进行判断,再使用THEN关键字和对应的选项值进行返回,最后使用ELSE关键字和默认值进行结束。例如,可以使用CASE搜索函数来根据type字段的值返回不同的结果。\[2\] 需要注意的是,在编写CASE WHEN语句时,一定要记得加上END关键字来结束语句。另外,CASE函数只返回第一个符合条件的值,剩下的CASE部分将会被自动忽略。\[3\] 所以,根据你的问题,SQL ServerCASE WHEN语句可以用来进行条件判断和返回不同的结果。可以使用简单CASE函数或CASE搜索函数的格式来编写语句,根据需要选择合适的格式。 #### 引用[.reference_title] - *1* *3* [SQL SERVER case when的使用方法](https://blog.csdn.net/gangli_8/article/details/131059906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [sqlserver case when 的用法](https://blog.csdn.net/Michaeles/article/details/85279851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值