0

VendorMaster である ProductMaster.Another テーブルという名前のテーブルが 1 つあります。ここで、指定された Vendormaster からすべての製品を検索したいと考えています。

そこでSQL ServerのIN句を使いたいと思います。

VendorName をコンマ区切り形式で渡します。例 HP、レノボ

関数「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

または、分割関数にテーブルを返すようにすることができます

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

2 番目の方法は、SQL インジェクション タイプの攻撃から保護されるため、はるかに望ましい方法です。

于 2012-08-07T12:20:48.680 に答える
1

join と null 許容パラメーターを個別に使用する方が良い

この table1 id がテーブル 2 id に結合していると考えてください。where 句では、col1 にパラメータ p1 を、col2 に p2 などを使用できます。

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 が null の場合、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 に答える