就像动态函数一样

发布于 2025-01-15 11:20:46 字数 1034 浏览 3 评论 0原文

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

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 + %'''

The code below works well. I however have issues trying to turn it into a like statement that I need some assistance with

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

So far, I have tried the code below but with not much success

DECLARE @pt nvarchar (100)

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

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

I have also tried;

DECLARE @pt nvarchar (100)

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦幻的心爱 2025-01-22 11:20:46

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

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

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

,也可以在动态 SQL 中添加它们,

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

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

If your stored procedure parameter is @deliverer and your dynamic SQL parameter is @pt, I believe your sp_executesql execution should assign the parameter as @pt = @deliverer.

As for adding wildcards, you can either add them before the call with

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

or add them in the dynamic SQL with

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

Note the doubled up quotes around the %. The variable @pt is not quoted

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文