传多个值放到存储过程的一个变量中的处理方法

本文介绍了一个SQL函数fn_ParseDelimitedStrings,用于将一个由指定分隔符分隔的字符串拆分为多个记录,并提供了一个使用该函数从逗号分隔的客户ID中获取客户订单的示例存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CREATE FUNCTION [dbo].[fn_ParseDelimitedStrings](@String nvarchar(MAX), @Delimiter char(1))
RETURNS @Values TABLE
(
     RowId
int Not Null IDENTITY(1,1) PRIMARY KEY
    ,Value
nvarchar(255) Not Null
)
AS
BEGIN
   
DECLARE  @startPos smallint
            ,
@endPos smallint

   
IF (RIGHT(@String, 1) != @Delimiter)
       
SET @String = @String + @Delimiter
   
SET @startPos = 1
   
SET @endPos = CharIndex(@Delimiter, @String)
   
WHILE @endPos > 0
       
BEGIN
           
INSERT @Values(Value)
           
SELECT LTRIM(RTRIM(SUBSTRING(@String, @startPos, @endPos - @startPos)))
           
-- remove the delimiter just used
            SET @String = STUFF(@String, @endPos, 1, '')
           
-- move string pointer to next delimiter
            SET @startPos = @endPos
           
SET @endPos = CHARINDEX(@Delimiter, @String)
   
END
   
RETURN
END

<!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin. http://dunnhq.com -->

This function can be used in sample stored procedure below.

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->CREATE PROCEDURE GetCustomers 
    @customerIDs AS nvarchar
AS
BEGIN
    DECLARE @custIDs AS table (Value nvarchar(255) Not Null)
    INSERT INTO @custIDs
        SELECT Value FROM [fn_ParseDelimitedStrings](@customerIDs, ',') 
    SELECT * FROM Orders WHERE CustomerID IN (SELECT Value FROM @custIDs)
END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值