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

前端之家收集整理的这篇文章主要介绍了sql-server – 关于’CASE’的转换失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在使用’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-sqlPrecedence规则,以便计算出单个返回的数据类型.由于int的优先级高于varchar,因此尝试对int进行隐式转换.随后失败了.

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

猜你在找的MsSQL相关文章