我在订购条款中使用案例陈述时遇到一些困难,并希望就我未考虑的事项提供一些指导。(SSMS 2017,SS2008 R2 SP3)
鉴于我可以跑:
Select Myname = [name],
OjectId = [object_id]
From sys.tables
Order By [name],[object_id]
并且可以运行:
Select Myname = [name],
OjectId = [object_id]
From sys.tables
Order By Myname,OjectId
以及:
Declare @Sort as Varchar(25)
Set @Sort = 'Name'
Select Myname = [name],
OjectId = [object_id]
From sys.tables
Order By case @Sort
When 'Name'
Then [name]
End
我无法理解为什么会失败:
Declare @Sort as Varchar(25)
Set @Sort = 'Name'
Select Myname = [name],
OjectId = [object_id]
From sys.tables
Order By case @Sort
When 'Name'
Then Myname
End
以及:
Declare @Sort as Varchar(25)
Set @Sort = 'NameObj'
Select Myname = [name],
OjectId = [object_id]
From sys.tables
Order By case @Sort
When 'NameObj' then [name],[object_id]
End
任何人都可以分享的任何输入都会有所帮助。
答案 0 :(得分:2)
以下是Microsoft在案例陈述
中定义 Then 关键字的方式然后
当input_expression等于when_expression求值为TRUE或Boolean_expression求值为TRUE时,返回表达式。结果表达式是任何有效表达式。
现在让我们定义表达式?
表达式
是SQL Server数据库引擎评估的符号和运算符组合,以获取单个数据值。简单表达式可以是单个常量,变量,列或标量函数。
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/expressions-transact-sql