0

我有 1 个名为 ProductMaster 的表。另一个表是 VendorMaster。现在我想从指定的 Vendormaster 中查找所有产品。

所以我想使用 SQL Server 的 IN 子句。

我将以逗号分隔的格式传递 VendorName。例如惠普、联想

我正在使用函数“f_split”以逗号(,)作为分隔符来拆分字符串。

我必须生成动态查询,因为我想为不同的参数使用自定义的 where 子句。

所以请告诉我我该怎么做?

4

3 回答 3

2

如果你的名字是

 declare @in varchar(100)
 select @in = 'HP,LENOVO'

您可以使用动态 SQL

 declare @sql nvarchar(1000)
 select @sql = 'select * from yourtable where yourfield in ('+@in +')'
 exec sp_executesql @sql

或者你可以让你的 split 函数返回一个表

 select * 
 from yourtable
     inner join dbo.f_Split(@in) f 
     on yourtable.yourfield =f.entry

第二个更可取,因为它可以防止 SQL 注入类型的攻击

于 2012-08-07T12:20:48.680 回答
1

您最好单独使用连接和可为空的参数

考虑这个 table1 id 连接到表 2 id,where 子句可以使用参数 p1 表示 col1 或 p2 表示 col2 等...

select * 
from table1 t1
inner join table2 t2 on t2.id = t1.id -- join the tables
where 1=1
and t2.col1 = isnull(p1, t2.col1)
and t2.col2 = isnull(p2, t2.col2)
.
. -- etc...
.

如果 p1 为空,那么您将得到一个 t2.col1 = t2.col1 的测试,它有效地将 p1 从 where 子句中解散。

于 2012-08-07T12:25:24.547 回答
0

你可以使用

SELECT * FROM ProductMaster WHERE VendorId IN (
  SELECT DISTINCT VendorId FROM VendorMaster 
  WHERE PATINDEX('%'+VendorName+'%',@VendorNameCommaSeparated)>0
)
于 2012-08-07T12:23:42.017 回答