就像在动态函数中
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 没有被引用
下面的代码运行良好。然而,我在尝试将它变成类似的声明时遇到了问题,我需要一些帮助
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 没有被引用