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
Répondre
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')
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)
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.
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
@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 –
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). –
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
Voyez, vous a dit qu'il pourrait y avoir de très bonnes raisons! –