[英]Passing string of parameters to stored procedure
我有一個存儲過程需要接受參數@pnumber
作為值的字符串,如1001,1002,1003..
我的存儲過程如下所示:
create procedure dbo.getprojectdetails
@pnumber nvarchar(255)
as
begin
set nocount on
declare @SQL varchar(1000);
set @SQL = 'SELECT pnumber, name, isprocessed FROM dbo.sample WHERE pnumber IN ('+''''+'p'+ @pnumber +''''+')'
exec(@SQL)
end
我的數據:
create table sample
(
pnumber varchar(500),
name varchar(500),
isprocessed int
)
insert into sample
values ('p1001', 'project1', 1),
('p1002', 'project2', 0),
('p1003', 'project3', 0),
('p1004', 'project4', 1),
('p1005', 'project5', 0),
('p1006', 'project6', 1)
select * from sample
這個存儲過程的問題是 - 當我將參數輸入為 (1001,1002) 時,生成的查詢如下所示:
SELECT pnumber, name, isprocessed
FROM dbo.sample
WHERE pnumber IN ('p1001,1002')
我的查詢實際上應該如下所示:
SELECT pnumber, name, isprocessed
FROM dbo.sample
WHERE pnumber IN ('p1001', 'p1002')
Rextester 鏈接: https://rextester.com/USZRB48933
有沒有辦法來解決這個問題?
無需動態 SQL
如果 2016+,你可以使用string_split()
示例dbFiddle
Declare @S varchar(max)='p1001,p1002' -- assumed missing p was a typo
select *
From sample
Where pnumber in ( select * from string_split(@S,',') )
退貨
pnumber name isprocessed
p1001 project1 1
p1002 project2 0
聲明@sq char(1) = char(39); -- 單引號
聲明@pee char(1) = 'p';
設置@pnumber = @sq + @pee + 替換(@pnumber,',',@sq + ',' + @sq + @pee) + @sq;
聲明@SQL varchar(1000); set @SQL = 'SELECT pnumber, name, isprocessed FROM dbo.sample WHERE pnumber IN (' + @pnumber + ')'
-- 打印@SQL -- 用於調試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.