我有 1 个名为 ProductMaster 的表。另一个表是 VendorMaster。现在我想从指定的 Vendormaster 中查找所有产品。
所以我想使用 SQL Server 的 IN 子句。
我将以逗号分隔的格式传递 VendorName。例如惠普、联想
我正在使用函数“f_split”以逗号(,)作为分隔符来拆分字符串。
我必须生成动态查询,因为我想为不同的参数使用自定义的 where 子句。
所以请告诉我我该怎么做?
我有 1 个名为 ProductMaster 的表。另一个表是 VendorMaster。现在我想从指定的 Vendormaster 中查找所有产品。
所以我想使用 SQL Server 的 IN 子句。
我将以逗号分隔的格式传递 VendorName。例如惠普、联想
我正在使用函数“f_split”以逗号(,)作为分隔符来拆分字符串。
我必须生成动态查询,因为我想为不同的参数使用自定义的 where 子句。
所以请告诉我我该怎么做?
如果你的名字是
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 注入类型的攻击
您最好单独使用连接和可为空的参数
考虑这个 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 子句中解散。
你可以使用
SELECT * FROM ProductMaster WHERE VendorId IN (
SELECT DISTINCT VendorId FROM VendorMaster
WHERE PATINDEX('%'+VendorName+'%',@VendorNameCommaSeparated)>0
)