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 结果的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 中插入点?

如何卸载干净sql server2012

SQL Server Query - 如何逐行转置并将它们堆叠起来? [复制]

如何启动sql server 2012服务

如何监测sql server2012alwayson

如何查看sql server 2012是不是激活?在哪里查看?急求呀