首页 > 解决方案 > 编辑要传递给存储过程的字符串

问题描述

我将以下字符串传递给存储过程,然后将其用作 where 子句的一部分。

WHERE order IN @passedOrders

字符串如下所示:

1234, 12345, 123456

为了使 where 语句起作用,我需要将这些数字中的每一个都视为一个单独的值,因此我需要将字符串读取如下:

'1234', '12345', '123456'

使用 C# 编辑要添加的额外字符的字符串的最佳方法是什么?

标签: c#stringstored-procedures

解决方案


如果您使用的是 2016 (130) 之前的 SQL Server 版本,则 string_split函数不可用。

如果是这种情况,我会建议一种类似于此的方法:stackoverflow.com/questions/29489036/split-comma-separated-varchar-parameter-up-into-temp-table

创建一个像这样的函数:

CREATE FUNCTION [SplitIntegers]
(
   @List      VARCHAR(MAX),
   @Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN 
(     SELECT [Item] = CONVERT(INT, [Item]) 
      FROM
      ( 
        SELECT [Item] = x.i.value('(./text())[1]', 'VARCHAR(max)')
        FROM ( SELECT [XML] = CONVERT(XML, '<i>' + REPLACE(@List, @Delimiter, '</i><i>') + '</i>').query('.')
      ) AS [A] 
      CROSS APPLY [XML].nodes('i') AS x(i) ) AS [Y]
      WHERE [Item] IS NOT NULL
);

...并在要拆分值列表的任何地方使用它:

WHERE order IN (SELECT Item FROM [SplitIntegers]('1234, 12345, 123456', ','))

注意:提供的函数仅适用于 INT 类型。


推荐阅读