UDF pour insert une string de text dans chaque ligne d'une table

J'ai cherché haut et bas pour une réponse et je n'arrive pas à find quelque chose qui me pointe dans la bonne direction.

J'ai besoin de créer un UDF qui va extraire chaque mot d'une string de text et returnner une table avec chaque mot de la string dans une rangée séparée.

L'UDF est seulement capable de prendre une variable '@mytext'.

Nous pouvons supposer que la string de text est séparée par un espace unique et peut contenir des virgules ou des points.

Par exemple, "ne vous inquiétez pas des échecs, ne vous inquiétez pas des chances que vous manquez quand vous n'essayez même pas". aurait besoin de returnner une table avec chaque mot sur une ligne séparée d'une colonne sans les virgules ou les périodes présentes.

Je suppose que la string de text devrait être séparée avec une valeur commune qui pourrait être utilisée pour séparer chaque mot pour insert, mais je pourrais totalement me tromper.

Toute aide avec ceci serait vraiment appréciée!

Sur la base de ce que j'ai dit jusqu'ici, voici mon code loin d'être complet que je ne suis pas sûr de savoir comment procéder

create function [dbo].[textConverter] ( @mytext nvarchar(max) ) returns @text_ssortingng table ( word nvarchar ) as begin set @mytext = replace(@mytext, 'what needs to be changed', 'what it needs to be changed too') --insert ssortingng to table end 

MODIFIER

J'ai vérifié quelques liens et j'ai découvert un peu plus d'informations à ce sujet, j'ai maintenant ce code. Cependant, il se termine avec une erreur. L'exemple qui a été utilisé dans l'article, j'ai trouvé le code sur les numéros utilisés dans l'encart alors c'est peut-être le problème?

 create function [dbo].[textConverter] ( @mytext varchar(max) ) returns @text_ssortingng table ( word nvarchar ) as begin --Change ssortingng to be seperated by commas set @mytext = replace(@mytext, ' ', ',') set @mytext = replace(@mytext, '.',',') --Eliminate double commas set @mytext = replace(@mytext, ',,', ',') declare @name nvarchar(255) declare @pos int while CHARINDEX(',', @mytext) > 0 begin select @pos = CHARINDEX(',', @mytext) select @name = SUBSTRING(@mytext, 1, @pos-1) insert into @text_ssortingng select @name select @mytext = SUBSTRING(@mytext, @pos+1, LEN(@mytext)-@pos) end insert into @text_ssortingng select @mytext return end --To use function select * from dbo.textConverter('don't worry about failures, worry about the chances you miss when you don't even try.') 

Voir la réponse ci-dessous, Il n'est pas en forme complète, mais peut être développé dans une fonction définie par l'user.

 Declare @Sentence Varchar(max) = 'don't worry about failures, worry about the chances you miss when you don't even try.' Set @Sentence = Replace(Replace(Replace(Replace(@Sentence,',',' '),'.',' '),' ',' '),' ',' ') Declare @e int = (Select Len(@Sentence) - Len(Replace(@Sentence,' ',''))) Declare @s int = 1 Declare @Result Table(id int identity(1,1),Words varchar(max)) --Select @s,@e While @s <= @e begin Insert into @Result Select Left(@Sentence,Charindex(' ',@Sentence,1)-1) Set @Sentence = Subssortingng(@Sentence,Charindex(' ',@Sentence,1) + 1,Len(@Sentence) ) Set @s = @s + 1 End Insert into @Result Select @Sentence Select * from @Result 

Résultat

 ----+----------- id |Words ----+----------- 1 |don't 2 |worry 3 |about 4 |failures 5 |worry 6 |about 7 |the 8 |chances 9 |you 10 |miss 11 |when 12 |you 13 |don't 14 |even 15 |try ----+----------- 

J'ai adapté une partie du code de http://sqlperformance.com/2012/07/t-sql-queries/split-ssortingngs car ma situation signifiait que le délimiteur ne pouvait pas être spécifié comme input. Je ne pouvais utiliser qu'en input et c'était la string de text. En tant que tel, ce qui suit a fonctionné pour moi:

 create function [dbo].[textConverter] ( @ssortingng nvarchar(max) ) returns @output table(splitdata nvarchar(max) ) begin --Change ssortingng to be seperated by commas set @ssortingng = replace(@ssortingng, ' ', ',') set @ssortingng = replace(@ssortingng, '.',',') --Eliminate double commas set @ssortingng = replace(@ssortingng, ',,', ',') declare @start int, @end int select @start = 1, @end = charindex(',',@ssortingng) while @start < len(@ssortingng) + 1 begin if @end = 0 set @end = len(@ssortingng) + 1 insert into @output (splitdata) values(subssortingng(@ssortingng, @start, @end - @start)) set @start = @end + 1 set @end = charindex(',', @ssortingng, @start) end return end