Sql server 在sql查询中将varchar值转换为数据类型int时,转换失败
我正在尝试一个动态SQL查询,但在转换时遇到了一个错误,但无法找出问题所在 我的问题是: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,
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:。非常感谢您的帮助。我实现了您的修复,并且工作完美无瑕。