/ / SQL Server 2005 separa o valor CSV do procedimento armazenado em várias colunas? - sql, sql-server, sql-server-2005, tsql, função dividida

SQL Server 2005 separa o valor CSV do procedimento armazenado em várias colunas? - sql, sql-server, sql-server-2005, tsql, função dividida

Eu sou um SQL Server 2005 newb e tenho que fazer algo que deve ser fácil, mas estou tendo dificuldades.

Por enquanto, meu procedimento armazenado é armazenarcsv em uma coluna no meu banco de dados. Eu preciso separar o csv em várias colunas. O número de valores em um parâmetro CSV é estático, sempre haverá 8 valores e eles sempre estarão na mesma ordem. Aqui está um exemplo dos dados:

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

Qual é a melhor função a ser usada para separarparâmetro em um procedimento armazenado para que eu possa inseri-lo em colunas separadas? Eu estava olhando para substring mas que parece ser posicional e não regex ciente?

Obrigado, Chris

Respostas:

2 para resposta № 1

SQL Server não tem a funcionalidade nativa, você tem que construir uma função (geralmente referida como "split"). thread fornece um número de opções TSQL, procurando a mesma resposta que você está procurando - o queexecuta melhor. Onde eles não estão testando grandes quantidades de dados delimitados por vírgulas, mas sua exigência é apenas para oito valores por coluna ...

O SQL Server 2005+ suporta SQLCLR, ondefuncionalidade pode ser transferida para o código .NET. O código .NET deve ser implantado na instância do SQL Server como um assembly, e as funções / procedimentos do TSQL precisam ser criados para expor a funcionalidade dentro do assembly.


2 para resposta № 2

SUBSTRING é posicional, mas você pode usar o CHARINDEX função para encontrar a posição de cada delimitador, e pegue os SUBSTRINGs entre cada vírgula.

É uma solução desajeitada, com certeza, mas o impacto é minimizado dado um pequeno número estático de campos que sempre aparecem em ordem ...


0 para resposta № 3

O SQL Server não é muito forte no tratamento de strings - especialmente se você não puder usar o SQL-CLR para ajudar.

Você pode estar melhor fazendo isso de antemão, em seu aplicativo cliente, usando algo como FileHelpers, uma biblioteca C # que importa muito facilmente um CSV e divide-o em um objeto para cada linha.

Depois de ter isso, você pode percorrer facilmente a matriz de objetos que você possui e inserir essas propriedades individuais de objeto em uma tabela relacional.