Gig*_*aPr 6 sql sql-server stored-procedures sql-server-2008
我正在创建一个存储过程,我想将其作为变量传递给逗号分隔的ID列表.我想将Ids用于select语句,例如:
Create Procedure up_TEST
@Ids VARCHAR(MAX)
AS
SELECT * FROM ATable a
WHERE a.Id IN(@Ids)
Run Code Online (Sandbox Code Playgroud)
显然我得到的错误@Ids
是varchar而不是INT,但是如何转换逗号分隔列表呢?
对于这些情况,我使用此表函数,您可以根据需要进行调整:
CREATE FUNCTION dbo.f_params_to_list (@par VARCHAR(500))
returns @result TABLE (value VARCHAR(30))
AS
begin
DECLARE @TempList table
(
value VARCHAR(30)
)
DECLARE @Value varchar(30), @Pos int
SET @par = LTRIM(RTRIM(@par))+ ','
SET @Pos = CHARINDEX(',', @par, 1)
IF REPLACE(@par, ',', '') <> ''
BEGIN
WHILE @Pos > 0
BEGIN
SET @Value = LTRIM(RTRIM(LEFT(@par, @Pos - 1)))
IF @Value <> ''
BEGIN
INSERT INTO @TempList (value) VALUES (@Value) --Use Appropriate conversion
END
SET @par = RIGHT(@par, LEN(@par) - @Pos)
SET @Pos = CHARINDEX(',', @par, 1)
END
END
INSERT @result
SELECT value
FROM @TempList
RETURN
END
Run Code Online (Sandbox Code Playgroud)
在您的存储过程中,您将像这样使用它:
Create Procedure up_TEST
@Ids VARCHAR(MAX)
AS
SELECT * FROM ATable a
WHERE a.Id IN(SELECT value FROM dbo.f_params_to_list(@Ids))
Run Code Online (Sandbox Code Playgroud)