SQL - using a variable for an IN clause

后端 未结 7 1404
醉话见心
醉话见心 2021-01-21 09:50

I wish to do something like the following:

declare @FrameNumber nvarchar(20)
set @FrameNumber = \'(p1, p2)\'

select from myTable where c1 in @FrameNumber
         


        
7条回答
  •  情歌与酒
    2021-01-21 10:04

    You could put load those values into a table variable, or you could use dynamic sql. Here are examples of each:

    TABLE VARIABLE

    DECLARE @FrameNumbers TABLE (
        Frame NVARCHAR(20)
    )
    
    INSERT INTO @FrameNumbers (
        Frame
    )
    SELECT 'p1'
    UNION ALL SELECT 'p2'
    

    option 1:

    SELECT * FROM myTable WHERE c1 in (
        SELECT Frame
        FROM @FrameNumbers
    )
    

    option 2:

    SELECT
        m.*
    FROM myTable m
    INNER JOIN @FrameNumbers f ON f.Frame = m.c1
    

    All that is fine, but this is my favorite:

    DYNAMIC SQL

    DECLARE 
    @FrameNumber nvarchar(20),
    @sql nvarchar(max),
    @ParamDef nvarchar(1000)
    
    SET @FrameNumber = '(p1, p2)'
    
    SET @sql = N'SELECT FROM myTable WHERE c1 IN ' + @FrameNumber
    
    EXECUTE dbo.sp_ExecuteSQL @sql
    

提交回复
热议问题