【发布时间】:2011-11-12 17:32:51
【问题描述】:
在使用“CASE”时,我遇到了从未听说过的问题。
问题是这样的:我在“SELECT”子句中使用“CASE”语句作为字段。调用int数据类型的列时,成功;但是,当调用 varchar 或 datetime 时,它是不成功的。
在错误结果中,据说我已将临时字段(包括“CASE”声明)标记为int,但并非如此。请帮忙...
“存储过程”内容
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'
错误信息
将 varchar 值“04/11/2011”转换为数据类型 int 时转换失败。
【问题讨论】:
-
如果您传递另一个参数说“名称”,您的 SP 是否工作?
dbo.fnDate函数真的有效吗? -
该功能正常工作
标签: sql-server