SQL Server 2005 разделить значение CSV хранимой процедуры на несколько столбцов? - PullRequest
1 голос
/ 28 сентября 2010

Я новичок в SQL Server 2005, и мне нужно сделать что-то, что должно быть легко, но у меня возникают трудности.

В настоящее время моя хранимая процедура хранит CSV в одном столбце в моей базе данных,Мне нужно разбить CSV на несколько столбцов.Количество значений в параметре CSV является статическим, всегда будет 8 значений, и они всегда будут в одном и том же порядке.Вот пример данных:

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

Какую функцию лучше использовать для разделения этого параметра в хранимом процессе, чтобы я мог затем вставить его в отдельные столбцы?Я смотрел на подстроку, но она, кажется, позиционная и не знает регулярных выражений ??

Спасибо, Крис

Ответы [ 3 ]

2 голосов
/ 29 сентября 2010

SUBSTRING является позиционным , но вы можете использовать функцию CHARINDEX , чтобы найти положение каждого разделителя и захватить SUBSTRING между каждой запятой.

Конечно, это неуклюжее решение, но влияние сводится к минимуму, учитывая небольшое статическое количество полей, которые всегда появляются в порядке ...

2 голосов
/ 29 сентября 2010

SQL Server не имеет встроенной функциональности; Вы должны построить функцию (обычно называемую «split»). Этот поток предоставляет ряд опций TSQL , ищущих тот же ответ, который вы ищете - что работает лучше всего. Они испытывают недостаток в тестировании больших объемов данных, разделенных запятыми, но в любом случае вам нужно только восемь значений на столбец ...

SQL Server 2005+ поддерживает SQLCLR, где функциональность может быть передана в код .NET. Код .NET должен быть развернут на экземпляре SQL Server как сборка, и необходимо создать функции / процедуры TSQL для предоставления функциональности в сборке.

0 голосов
/ 29 сентября 2010

SQL Server не очень силен в обработке строк - особенно если вы не можете использовать SQL-CLR, чтобы помочь.

Возможно, лучше сделать это заранее, в своем клиентском приложении, используя что-то вроде FileHelpers , библиотеку C #, которая очень легко импортирует CSV и разбивает ее на объект для каждой строки.

Как только вы это сделаете, вы можете легко пройтись по массиву имеющихся у вас объектов и вставить эти свойства отдельных объектов в реляционную таблицу.

...