如果没有提供ID,我需要使用参数ID(int)在列Id(int)中搜索ffg表,我想要返回所有数据表。我曾尝试下面这个查询:转换varchar值'%'时转换失败
SELECT *
FROM TableName
WHERE Id LIKE ISNULL (@id, '%')
但此查询返回错误:
Conversion failed when converting the varchar value '%' to data type int.
如果没有提供ID,我需要使用参数ID(int)在列Id(int)中搜索ffg表,我想要返回所有数据表。我曾尝试下面这个查询:转换varchar值'%'时转换失败
SELECT *
FROM TableName
WHERE Id LIKE ISNULL (@id, '%')
但此查询返回错误:
Conversion failed when converting the varchar value '%' to data type int.
这是你所拥有的ISNULL
:
SELECT *
FROM TableName
WHERE ID = ISNULL(@id, ID))
这里,如果@id为空,将传递ID(列值本身)进行比较,这将始终匹配并导致返回表中的所有数据。
您正在使用“%”比较整数,也使用像这两者都是错误的。 你需要使用这个
SELECT *
FROM TableName
WHERE (Id = @id) or (@id is null)
这是因为ISNULL
规则:
replacement_value must be of a type that is implicitly convertible to the type of check_expresssion.
在您的条件:
ISNULL(@id, '%')
当@id
是NULL
,SQL Server试图转换'%'
到INT
这会导致转换错误。
要返回所有行如果@id
是NULL
,你可以这样做:
SELECT *
FROM TableName
WHERE
(Id = @id OR @id IS NULL)
需要种姓ID,因为它是整数,所以做这样的:
Where CAST(Id AS TEXT) LIKE '123%')
感谢您的回答。我试图做到这一点,但它返回这个错误“显式转换从数据类型int到文本是不允许的。” – QKWS
我试过这个,它工作。谢谢! – QKWS