【问题标题】:About 'CASE' a conversion failure关于“CASE”转换失败
【发布时间】: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


【解决方案1】:

T-SQL 的Precedence 规则在评估CASE 时适用,以便确定single 返回的数据类型是什么。由于int 的优先级高于varchar,因此尝试隐式转换为int,但随后失败。

要解决此问题,请将您的 intdatetime 表达式转换为 varchar

【讨论】:

    【解决方案2】:

    尝试将 BirthDate 转换/转换为 VARCHAR。像这样。

    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 CAST(dbo.fnDate(BirthDate) AS VARCHAR) -- update here
       WHEN 'Gender' THEN dbo.fnGender(Gender)
       WHEN 'Lang' THEN Lang
       ELSE NULL
    END AS [Alan] varchar(200)
    FROM Registry_Persons
    WHERE ID = @ID
    

    【讨论】:

      猜你喜欢
      • 2014-01-17
      • 1970-01-01
      • 2011-06-28
      • 2010-09-20
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多