J'utilise SQL Ser 2008 et j'ai une grande table avec une seule colonne de données. Les données sont une chaîne aléatoire avec très peu de cohérence. Exemple: Nom de compte 445566 0010020056893010445478008 AFD 369. J'ai travaillé avec une fonction split proposée par un utilisateur de stackoverflow. Cela fonctionne très bien mais la fonction assigne la chaîne divisée en une colonne. J'ai besoin d'une rangée de colonnes individuelles. Le résultat actuel est 1col avec les valeurs Name, Account, 445566, ... mais le résultat que je recherche est col1 Name, col2 Account, col3 445566, ... Si quelqu'un pouvait donner un aperçu sur la façon d'adapter ce script ou son utilisation pour obtenir le résultat souhaité, il serait très apprécié.SQL Server 2008 T-SQL UDF Split() Tailoring
CREATE FUNCTION [dbo].[Split]
(
@String varchar(max)
,@Delimiter char
)
RETURNS @Results table
(
Ordinal int
,StringValue varchar(max)
)
as
begin
set @String = isnull(@String,'')
set @Delimiter = isnull(@Delimiter,'')
declare
@TempString varchar(max) = @String
,@Ordinal int = 0
,@CharIndex int = 0
set @CharIndex = charindex(@Delimiter, @TempString)
while @CharIndex != 0 begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,substring(@TempString, 0, @CharIndex)
)
set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex)
set @CharIndex = charindex(@Delimiter, @TempString)
end
if @TempString != '' begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,@TempString
)
end
return
end
--The usage:
SELECT
*
FROM
mytable M
CROSS APPLY
[dbo].[Split] (M.TheColumn, ' ') S
Where rtrim(s.StringValue) != ''
Soit dit en passant, la fonction est empruntée à @antisanity et son utilisation sur la table venait de @gbn. Merci les gars! – 2boolORNOT2bool
Qu'essayez-vous d'accomplir? Ces données sont-elles conservées ou s'agit-il d'une importation? La largeur de la table de sortie variera-t-elle ou sera-t-elle statique? – canon
Je suis l'ingénierie inverse d'un ancien lot de fichiers à plat. Les données sont constituées de chaînes contenant 120 caractères. La largeur de la table sera un nombre statique de colonnes. Mon but est de décomposer la chaîne en une rangée de colonnes et pas seulement une colonne contenant toutes les données mais 9 ou 10 colonnes. Cela affectera quelque chose comme 10000 lignes de données à la fois. Merci encore l'antisanité pour toute aide! – 2boolORNOT2bool