c# - 编辑要传递给存储过程的字符串
问题描述
我将以下字符串传递给存储过程,然后将其用作 where 子句的一部分。
WHERE order IN @passedOrders
字符串如下所示:
1234, 12345, 123456
为了使 where 语句起作用,我需要将这些数字中的每一个都视为一个单独的值,因此我需要将字符串读取如下:
'1234', '12345', '123456'
使用 C# 编辑要添加的额外字符的字符串的最佳方法是什么?
解决方案
如果您使用的是 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 类型。
推荐阅读
- c# - 使用 C# 中两个括号之间的所有字符作为分隔符拆分字符串
- google-cloud-platform - 列出按时间排序的 Google Cloud 资源
- google-chrome-extension - 带有 Chrome 扩展程序的 Cookie SameSite
- python - Python:在硒中加载所有网页内容
- python-3.x - 使用 ElementTree 解析 XML 时如何获取子节点的文本值
- azure-api-management - API 管理条件流策略
- asp.net-core - 在项目中创建文件夹的 dotnet cli 未添加到解决方案中
- python - 为什么这个情节是平的?
- arrays - MongoDB 不在任何数组中(嵌套数组)
- excel - 文本框搜索栏和列表框 - 4