2016-03-21 83 views
0

如果没有提供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.

回答

1

这是你所拥有的ISNULL

SELECT * 
FROM TableName 
WHERE ID = ISNULL(@id, ID)) 

这里,如果@id为空,将传递ID(列值本身)进行比较,这将始终匹配并导致返回表中的所有数据。

+0

我试过这个,它工作。谢谢! – QKWS

2

您正在使用“%”比较整数,也使用像这两者都是错误的。 你需要使用这个

SELECT * 
FROM TableName 
WHERE (Id = @id) or (@id is null) 
1

这是因为ISNULL规则:

replacement_value must be of a type that is implicitly convertible to the type of check_expresssion.

在您的条件:

ISNULL(@id, '%') 

@idNULL,SQL Server试图转换'%'INT这会导致转换错误。

要返回所有行如果@idNULL,你可以这样做:

SELECT * 
FROM TableName 
WHERE 
    (Id = @id OR @id IS NULL) 
0

需要种姓ID,因为它是整数,所以做这样的:

Where CAST(Id AS TEXT) LIKE '123%') 
+1

感谢您的回答。我试图做到这一点,但它返回这个错误“显式转换从数据类型int到文本是不允许的。” – QKWS

相关问题