SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果
Posted
技术标签:
【中文标题】SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果【英文标题】:SQL Server 2012: How to display the @Var result inside a Case statement with literals before and after the @Var 【发布时间】:2015-09-27 21:27:36 【问题描述】:SQL Server 2012:如何在 Case
语句中显示 @Var
结果,并在 @Var
前后使用文字?
一个简单的查询:
Declare @Var1 ...
Declare @Var2....
Select ....
CASE
WHEN ...........
THEN 'Display this sentence ' + @Var1 +'followed by there words'
ELSE 'Display these other words ' +@Var2 'followed by these other words'
END
错误信息是
'显示这句话'不是声明变量。
我知道不是!它应该是文字语句,只有在文字语句中带有@Var1
结果。
我错过了什么?
【问题讨论】:
请发布实际代码。当你得到伪代码来调试时,很难在语句中找到语法错误 在 SQL Server 中,CASE
不是语句 - 它是 表达式,因此它可以返回几个可能值之一 -但它不能用于控制程序流程。您需要重新考虑您的代码以考虑到这一点 - CASE
只能返回一个值 - 您需要处理在 CASE
之外显示它的问题
【参考方案1】:
你做连接的方式没有错,我认为错误在逻辑上,你有IF ELSE
条件吗? ,可能你遇到的错误是在@var1
或@var2
这两个变量上,之所以显示这句话不是声明的变量是因为那是与变量串联的部分。
提示:
确保声明的变量@var1
和@var2
在条件的BEGIN and END
内,这意味着程序在读取CASE WHEN
逻辑之前读取您的声明。
如果您不确定逻辑,只需在脚本顶部声明您的 2 个变量,以确保它正在被读取/声明。
【讨论】:
我在错误消息上说错了(它是从另一台 PC 上的内存中完成的)。这是实际的错误消息:Msg 245, Level 16, State 1, Line 8 Conversion failed 将 varchar 值 ''Display these other words' 转换为数据类型 int。因此,错误消息是它认为文本(要显示)是需要转换的数据类型。有什么想法吗?【参考方案2】:根据评论:
我在错误消息上说错了(是从另一台 PC 上的内存中做的)。这是实际的错误消息:Msg 245, Level 16, State 1, Line 8 Conversion failed 将 varchar 值 ''Display these other words' 转换为数据类型 int。因此,错误消息是它认为文本(要显示)是需要转换的数据类型。有什么想法吗?
您的问题(如果发布了实际代码和错误,可能更容易解决)
声明@Var1 ...
其实是Declare @var1 int
。
所以你的陈述:
'Display this sentence ' + @Var1 +'followed by there words '
失败了:
将 varchar 值 ''Display these other words' 转换为数据类型 int 时转换失败。
您只需将 @Var1
转换/转换为 varchar
即可用于您的案例陈述。
WHEN 'Display this sentence ' + convert(varchar(14), @Var1) +'followed by there words '
您看到此行为的原因(取自here 是:
在尝试连接参数之前,您需要将参数显式转换为 VARCHAR。当 SQL Server 看到@my_int(在您的情况下为@Var1)+'X'时,它认为您正在尝试将数字“X”添加到@my_int(@Var1)并且它不能这样做。
另一个选项是concat。
WHEN concat('Display this sentence ', @Var1, ' followed by there words ')
【讨论】:
以上是关于SQL Server 2012:如何在 @Var 前后使用文字在 Case 语句中显示 @Var 结果的主要内容,如果未能解决你的问题,请参考以下文章