Passing SQL stored procedure entirety of WHERE clause

后端 未结 5 2021
隐瞒了意图╮
隐瞒了意图╮ 2020-12-11 19:01

I have a SQL stored procedure of the form

SELECT [fields] FROM [table] WHERE @whereSql

I want to pass the procedure an argument (@whereSql)

5条回答
  •  無奈伤痛
    2020-12-11 19:37

    Dynamic SQL listed in some of the Answers is definitely a solution. However, if Dynamic SQL needs to be avoided, one of the solutions that I prefer is to make use of table variables (or temp tables) to store the parameter value that is used for comparison in WHERE clause.

    Here is an example Stored Procedure implementation.

    CREATE PROCEDURE [dbo].[myStoredProc]
    @parameter1 varchar(50)
    AS
    
    declare  @myTempTableVar Table(param1 varchar(50))
    insert into @myTempTableVar values(@parameter1)
    
    select * from MyTable where MyColumn in (select param1 from @myTempTableVar)
    
    GO
    

    In case you want to pass in multiple values, then the comma separated values can be stored as rows in the table variable and used in the same way for comparison.

    CREATE PROCEDURE [dbo].[myStoredProc]
    @parameter1 varchar(50)
    AS
    
    --Code Block to Convert Comma Seperated Parameter into Values of a Temporary Table Variable
    declare  @myTempTableVar Table(param1 varchar(50))
    declare @index int =0, @tempString varchar(10)
    
    if charindex(',',@parameter1) > 0
    begin
     set @index = charindex(',',@parameter1)
     while @index > 0
      begin
        set @tempString = SubString(@parameter1,1,@index-1)
        insert into @myTempTableVar values (@tempString)
        set @parameter1 = SubString(@parameter1,@index+1,len(@parameter1)-@index)
        set @index = charindex(',',@parameter1)
      end
    
      set @tempString = @parameter1
      insert into @myTempTableVar values (@tempString)
    end
    else
    insert into @myTempTableVar values (@parameter1)
    
    select * from MyTable where MyColumn in (select param1 from @myTempTableVar)
    
    GO
    

提交回复
热议问题