Sql server 在sql查询中将varchar值转换为数据类型int时,转换失败

Sql server 在sql查询中将varchar值转换为数据类型int时,转换失败,sql-server,tsql,Sql Server,Tsql,我正在尝试一个动态SQL查询,但在转换时遇到了一个错误,但无法找出问题所在 我的问题是: DECLARE @VarSubCriBusqueda VARCHAR(MAX) SET @VarSubCriBusqueda = 'Marca' DECLARE @InputString VARCHAR(MAX) SET @InputString = '%' SELECT Marcas.MarcaID, Marcas.Marca, Clases.ClaseNo, Marcas.Codigo,

我正在尝试一个动态SQL查询,但在转换时遇到了一个错误,但无法找出问题所在

我的问题是:

DECLARE @VarSubCriBusqueda VARCHAR(MAX)
SET @VarSubCriBusqueda = 'Marca'

DECLARE @InputString VARCHAR(MAX)
SET @InputString = '%'

SELECT 
    Marcas.MarcaID, Marcas.Marca, Clases.ClaseNo, Marcas.Codigo, Propietarios.Propietario
FROM 
    Marcas 
LEFT OUTER JOIN 
    Propietarios ON marcas.PropietarioID = Propietarios.PropietarioID
LEFT OUTER JOIN
    Clases ON Marcas.ClaseIntID = clases.ClaseID 
LEFT OUTER JOIN
    Clientes ON Clientes.ClienteID = Marcas.ClienteID
WHERE 
    CASE @VarSubCriBusqueda
        WHEN 'Clases.ClaseNo'
            THEN Clases.ClaseNo
        WHEN 'Codigo'
            THEN Codigo
        WHEN 'Propietarios.Propietario'
            THEN Propietarios.Propietario
        WHEN 'Clientes.Empresa'
            THEN Clientes.Empresa
        WHEN 'Contacto'
            THEN Marcas.Contacto
        WHEN 'Marca'
            THEN Marca
    END LIKE @InputString
它以以下消息结束:

Msg 245,第16级,状态1,第6行
将varchar值“ACADEMY AWARDS”转换为数据类型int时,转换失败


有什么帮助吗?

。缺少一个事实,即
case
表达式返回单个类型。而且,如果
then
else
子句中的任何一个都是数字,则所有子句都转换为数字。我认为一列或多列是数字。一种修复方法是显式转换

更好的解决方法是完全去掉
case
表达式:

WHERE (@VarSubCriBusqueda = 'Clases.ClaseNo' AND Clases.ClaseNo like @InputString) OR
      (@VarSubCriBusqueda = 'Codigo' AND Codigo like @InputString) OR
       . . . 

即使使用这个公式,你也应该对你的类型使用正确的比较。所以,如果你有一个数字,
似乎并不合适。

很可能。缺少一个事实,即
case
表达式返回单个类型。而且,如果
then
else
子句中的任何一个都是数字,则所有子句都转换为数字。我认为一列或多列是数字。一种修复方法是显式转换

更好的解决方法是完全去掉
case
表达式:

WHERE (@VarSubCriBusqueda = 'Clases.ClaseNo' AND Clases.ClaseNo like @InputString) OR
      (@VarSubCriBusqueda = 'Codigo' AND Codigo like @InputString) OR
       . . . 

即使使用这个公式,你也应该对你的类型使用正确的比较。所以,如果你有一个数字,
比如
似乎不合适。

你的
WHERE
子句应该做什么?最有可能的情况是,
CASE
表达式不是您需要的。请将表的DDL添加到您的问题中,以便我们可以查看所涉及的数据类型。您的
WHERE
子句应该做什么?最有可能的情况是,
CASE
表达式不是您需要的。请将表的DDL添加到您的问题中,以便我们可以查看所涉及的数据类型。@Threadw Reference:。非常感谢您的帮助。我实现了您的修复,并且工作正常。@Threadw Reference:。非常感谢您的帮助。我实现了您的修复,并且工作完美无瑕。