2010-10-27 17 views
0

j'ai besoin de convertir des données stockées sous forme varchar dans une base de données SQL Server que je veux changer de CamelCase à delimiter séparés. Je sais comment faire trivialement en C# mais pas en T-SQL. Des idées?Transformer les données de chaîne dans une base de données SQL Server

+0

Pas une réponse, je ne vais pas poster comme une réponse; Mais pourquoi ne pas le faire en utilisant l'outil que vous connaissez le mieux? (Je reconnais qu'il peut y avoir de très bonnes raisons, c'est pourquoi je demande 'pourquoi', par opposition à vous dire de ne pas le faire de cette façon .. hehe). –

+0

Il est plus efficace de le faire dans la base de données et je ne peux pas installer d'objets C# dans cette base de données pour des raisons de sécurité. (c'est un serveur fédéral sql face à face) – craigmoliver

+0

Voyez, vous a dit qu'il pourrait y avoir de très bonnes raisons! –

Répondre

1
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

Alter FUNCTION dbo.GetDelimitedString 
( 
    @CamelCaseString nvarchar(max) 
) 
RETURNS NVARCHAR(MAX) 
AS 
BEGIN 
    DECLARE @Result_String nvarchar(max) 
    Select @Result_String = @CamelCaseString 

    DECLARE @pos INT 
    DECLARE @DelimiterCount INT 
    Select @Pos = 2 
    Select @DelimiterCount = 0   

    WHILE @pos <= DATALENGTH(@CamelCaseString) 
    BEGIN 
     IF ASCII(SUBSTRING(@CamelCaseString, @pos, 1)) BETWEEN 65 AND 90 

     BEGIN 
      set @Result_String = STUFF(@Result_String,@Pos + @DelimiterCount,0,',') 
      Set @DelimiterCount = @DelimiterCount + 1 
     END 
    SET @pos = @pos + 1; 
    END 

    RETURN @RESULT_STRING 
END 

Et vous pouvez utiliser cette fonction -

select dbo.GetDelimitedString('TestStringInCamelCase') 
2

Je n'ai pas SQL Server à portée de main pour essayer, mais vous avez besoin d'un test en boucle pour:

CODE(SUBSTRING (xx, thatpositions, 1)) BETWEEN 64 and 89

Ensuite, insérez votre delimiter:

SUBSTRING (xx, 1, thatpositions -1) + delimiter + SUBSTRING (xx, thatpositions, 8000) 
1

Si vous avez le code C# pour Pour ce faire, et utilisez SQL Server 2005+, vous pouvez exposer le code .NET en tant que fonction TSQL (ou procédure stockée) via SQLCLR. Vérifiez que vous êtes autorisé - la plupart ne le font pas, par souci de soutien et/ou un grand potentiel d'abus. Sachez également que SQL Server 2005 utilise .NET 2.0 tandis que SQL Server 2008 (R2 inclus) est .NET v3.5.

This article permet d'activer SQLCLR (ne nécessite pas de redémarrage), la construction, le déploiement & en utilisant un SQLCLR pour le support de regex.

C'est ma préférence d'utiliser TSQL chaque fois que possible.

+0

Je ne peux pas installer d'objets C# dans cette base de données pour des raisons de sécurité ou je l'aurais fait. – craigmoliver

+0

@craigmoliver: Compris - approche très commune dans la plupart des magasins. Je vais laisser ça à ceux qui le voudront. J'ai déjà voté pour gbn de toute façon –