加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 关于’CASE’的转换失败

发布时间:2020-12-24 16:04:59 所属栏目:MsSql教程 来源:网络整理
导读:在使用’CASE’时,我遇到了一些我从未听过的问题. 问题是这样的:我在’SELECT’子句中使用’CASE’语句作为字段.调用具有int数据类型的列时,它是成功的;但是,在调用varchar或datetime时,它不成功. 在错误结果中,它说我标记了临时字段,包括’CASE’语句,作为i

在使用’CASE’时,我遇到了一些我从未听过的问题.
问题是这样的:我在’SELECT’子句中使用’CASE’语句作为字段.调用具有int数据类型的列时,它是成功的;但是,在调用varchar或datetime时,它不成功.
在错误结果中,它说我标记了临时字段,包括’CASE’语句,作为int,但不是这样.请帮忙…

The ‘STORED PROCEDURE’ Content

CREATE PROC spRegistry_PersonsGetField
@ID int,@Field varchar(100)
AS
SELECT CASE @Field 
WHEN 'Name' THEN Name
WHEN 'Surname' THEN Surname
WHEN 'Username' THEN Username
WHEN 'Password' THEN Password
WHEN 'Status' THEN dbo.fnStatus(Status)
WHEN 'EMail' THEN EMail
WHEN 'Tel' THEN dbo.fnIsEmpty(Tel)
WHEN 'Address' THEN dbo.fnIsEmpty(Address)
WHEN 'City' THEN dbo.fnIsEmpty(City)
WHEN 'BirthDate' THEN dbo.fnDate(BirthDate)
WHEN 'Gender' THEN dbo.fnGender(Gender)
WHEN 'Lang' THEN Lang
ELSE NULL
END
AS [Alan] varchar(200)
FROM Registry_Persons
WHERE ID = @ID

我的查询

EXEC spRegistry_PersonsGetField 1,‘BirthDate’

错误消息

Conversion failed when converting the varchar value ’04/11/2011′ to data type int.

解决方法

在评估CASE时,适用T-SQL的 Precedence规则,以便计算出单个返回的数据类型.由于int的优先级高于varchar,因此尝试对int进行隐式转换.随后失败了.

要解决此问题,请将int或datetime表达式转换为varchar.

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读