1

我是 SQL Server 2005 新手,我必须做一些应该很容易但我遇到困难的事情。

目前我的存储过程将 csv 存储在我的数据库中的一列中。我需要将 csv 分成多列。CSV 参数中的值的数量是静态的,总是会有 8 个值,并且它们的顺序总是相同的。以下是数据示例:

req,3NxWZ7RYQVsC4chw3BMeIlywYqjxdF5IUX8GMUqgJlJTztcXQS,192.168.208.78,getUserInfo,AssociateService,03303925,null,M042872, 

用于在存储过程中分隔此参数的最佳功能是什么,以便我可以将其插入单独的列中?我在看子字符串,但这似乎是位置的而不是正则表达式?

谢谢,克里斯

4

3 回答 3

2

SQL Server 没有本机功能;您必须构建一个功能(通常称为“拆分”)。该线程提供了许多 TSQL 选项,寻找您所追求的相同答案——性能最佳的答案。他们缺乏的是测试大量逗号分隔的数据,但是无论如何您的要求只是每列八个值......

SQL Server 2005+ 支持 SQLCLR,其中功能可以移交给 .NET 代码。.NET 代码必须作为程序集部署到 SQL Server 实例,并且需要创建 TSQL 函数/过程以公开程序集中的功能。

于 2010-09-28T20:04:38.387 回答
2

SUBSTRING 位置性的,但您可以使用CHARINDEX函数来查找每个分隔符的位置,并在每个逗号之间获取 SUBSTRING。

可以肯定的是,这是一个笨重的解决方案,但是考虑到总是按顺序出现的少量静态字段,影响最小化......

于 2010-09-28T20:05:37.273 回答
0

SQL Server 在字符串处理方面不是很强大——尤其是当您无法使用 SQL-CLR 来提供帮助时。

您最好事先在客户端应用程序中执行此操作,使用类似FileHelpers的 C# 库,它非常容易导入 CSV 并将其分解为每一行的对象。

一旦你有了它,你就可以轻松地遍历你拥有的对象数组,并将这些单独的对象属性插入到关系表中。

于 2010-09-28T20:24:14.283 回答