Need help in dynamic query with IN Clause

前端 未结 3 873
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-12 07:17

I have 1 Table which is named as ProductMaster.Another Table which is VendorMaster. Now i want to find all the products from specified Vendormaster.

So i want to use

相关标签:
3条回答
  • 2020-12-12 07:47

    If your verdor name is

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

    You can use dynamic SQL

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

    or you can make your split function return a table

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

    The second is much preferable due to its protection from SQL injection type attacks

    0 讨论(0)
  • 2020-12-12 07:49

    You are better off using a join and nullable parameters individually

    consider this table1 id joins on table 2 id, and the where clause can use paramter p1 for col1 or p2 for col2 etc...

    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...
    .
    

    If the p1 is null then you get a test of t2.col1 = t2.col1 which effectively dismisses p1 from the where clause.

    0 讨论(0)
  • 2020-12-12 07:54

    You could just use

    SELECT * FROM ProductMaster WHERE VendorId IN (
      SELECT DISTINCT VendorId FROM VendorMaster 
      WHERE PATINDEX('%'+VendorName+'%',@VendorNameCommaSeparated)>0
    )
    
    0 讨论(0)
提交回复
热议问题