1

我正在处理一个查询,我需要一起使用“LIKE”和“IN”之类的功能,这些值由 SSRS 返回,我无法控制如何格式化 SSRS 提供的字符串。

我的情况如下

SELECT *
FROM suppliers
WHERE supplier_name LIKE IN ('IBM', 'Hewlett Packard', 'DELL', 'Microsoft',)

我想要所有包含“IBM”、“Microsoft”等的供应商名称。

例如:“IBM_ER”、“IBM-PCR”、“EBM_TCC”、“Microsoft-Delta”、“Microsoft-TCC”等。

我将从 SSRS 接收选项列表作为参数,其中@Manufacture 由如上所示的字符串组成,我无法控制它。

SELECT *
FROM suppliers
WHERE supplier_name LIKE IN (@Manufacturer) 

有什么办法可以实现这件事吗?

4

4 回答 4

3

好吧,Nikhil,你应该学会的第一件事就是保持冷静。人们在这里提供帮助,如果他们不理解您的问题,可能是您错过了发布更多详细信息。

Jarrod 的回答是正确的,但是如果您将 @Manufactor 作为字符串列表,您可以执行以下操作:拆分字符串,然后将其用作 IN 语句。

因此,首先,如果您没有,请创建一个拆分功能。这是一个示例:https ://codereview.stackexchange.com/questions/15125/sql-server-split-function-optimized

其次,像这样修改你的陈述。

SELECT *
FROM suppliers
WHERE supplier_name IN (SELECT [value] FROM dbo.fn_Split(@Manufactor,','))
于 2013-03-14T21:53:14.877 回答
1

试试这个

SELECT *
FROM suppliers
WHERE supplier_name like '%IBM%'
or supplier_name like '%Microsoft%'
or supplier_name like '%Hewlett Packard%'
于 2013-03-14T21:38:08.457 回答
1

首先,创建一个拆分函数,以便您可以将 CSV 字符串转换为数据行

接下来,加入这个函数的结果,用通配符填充分割的结果:

SELECT *
FROM suppliers sup
JOIN dbo.Split(',', @Manufacturer) split
    ON sup.supplier_name LIKE '%' + split.s + '%'
于 2013-03-14T22:01:30.373 回答
0

您正在寻找的是一个UNION

SELECT *
FROM suppliers
WHERE supplier_name LIKE '%IBM%'
UNION
SELECT *
FROM suppliers
WHERE supplier_name LIKE '%Hewlett Packard%'
UNION
SELECT *
FROM suppliers
WHERE supplier_name LIKE '%Microsoft%'

由于您已在问题中添加了详细信息,因此您可以调用存储过程并将名称列表解析为服务器上的动态 SQL 语句,但它会很快变得非常难看,更不用说 SQL 注入向量了小路。

于 2013-03-14T21:33:56.523 回答