簡體   English   中英

將參數字符串傳遞給存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM