就像在动态函数中

Like in dynamic function

下面的代码运行良好。然而,我在尝试将它变成类似的声明时遇到了问题,我需要一些帮助

CREATE PROCEDURE [dbo].[searcher]
    @deliverer nvarchar (100)
AS
BEGIN
    DECLARE @sql nvarchar(1000)

    SET @sql = 'SELECT location, deliverer, charger FROM Store where 1=1'

    IF (@deliverer IS NOT NULL)
        SET @sql = @sql + ' and deliverer =@pt'

    DECLARE @t1 as TABLE 
                   (
                       location varchar(1000), 
                       deliverer varchar(100), 
                       charger varchar(100)
                   )

    INSERT INTO t1
        EXEC sp_executesql @sql,
                N'@pt nvarchar(100)',
                @pt=location

    SELECT * FROM t1
END

到目前为止,我已经尝试了下面的代码,但收效甚微

DECLARE @pt nvarchar (100)

SET @pt = '%' + @pt + '%'

IF (@deliverer IS NOT NULL)
    SET @sql = @sql + ' and deliverer like @pt'

我也试过了;

DECLARE @pt nvarchar (100)

IF (@deliverer IS NOT NULL)
    SET @sql = @sql + ' and deliverer like ''% + @pt + %'''

如果您的存储过程参数是@deliverer 并且您的动态SQL 参数是@pt,我相信您的sp_executesql 执行应该将参数分配为@pt = @deliverer

至于添加通配符,您可以在调用之前添加它们

SET @deliverer = '%' + @deliverer + '%'

或将它们添加到动态 SQL 中

SET @sql = @sql + ' and deliverer like ''%'' + @pt + ''%'''

请注意 % 周围的双引号。变量@pt 没有被引用