在使用' CASE'我遇到的问题,我从来没有听说过.
问题是这样的:我使用' CASE'statement in' SELECT'子句作为字段.调用具有int数据类型的列时,它是成功的; 但是,在调用varchar或datetime时,它不成功.
在错误结果中,它说我标记了临时字段,包括' CASE'语句int,但不是这样.请帮忙...
'STORED PROCEDURE'内容
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
Run Code Online (Sandbox Code Playgroud)
我的查询
EXEC spRegistry_PersonsGetField 1,'BirthDate'
错误消息
将varchar值'04/11/2011'转换为数据类型int时转换失败.
在评估a时,T-SQL的Precedence规则适用CASE于计算单个返回的数据类型的内容.由于int优先级高于varchar隐式转换,因此int会失败.
要解决此问题,请将您的int或datetime表达式转换为varchar.
| 归档时间: |
|
| 查看次数: |
2493 次 |
| 最近记录: |