Équivalent T-SQL de = rand ()

J'ai plusieurs tables de contenu que je veux remplir avec des paragraphes randoms de text. En MS Word, je peux simplement mettre = rand () et hop! Je reçois trois paragraphes de text fraîchement sorti de la presse.

Existe-t-il un script / une command SQL que je peux utiliser pour générer des mots de dictionary randoms en utilisant t-sql?

; declare @Lorem nvarchar(max), @RowsToGen int, @Factor int select @Lorem = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', @RowsToGen = 200 -- ssortingp punctuations set @Lorem = replace(@Lorem, ',', '') set @Lorem = replace(@Lorem, '.', '') ; with Num1(Pos) as ( select cast(1 as int) union all select cast(Pos + 1 as int) from Num1 where Pos < len(@Lorem) ), Words as ( select subssortingng(@Lorem, Pos, charindex(' ', @Lorem + ' ', Pos) - Pos) as Word from Num1 where Pos <= len(@Lorem) and subssortingng(',' + @Lorem, Pos, 1) = ' ' ), WordsCnt(Factor) as ( select @RowsToGen / count(*) + 1 from Words ), Num2(Pos) as ( select cast(1 as int) union all select cast(Pos + 1 as int) from Num2 cross join WordsCnt where Pos < WordsCnt. Factor ) select top (@RowsToGen) Word from Num2 cross join Words order by newid() option (maxrecursion 0) 

Voici une autre version qui donne une phrase au lieu d'un seul mot par rangée, comme demandé par Raj More.

 ; declare @Lorem nvarchar(max), @SentenceToGen int, @WordsPerSentence int, @Factor int select @Lorem = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', @SentenceToGen = 200, @WordsPerSentence = 10 -- ssortingp punctuations set @Lorem = replace(@Lorem, ',', '') set @Lorem = replace(@Lorem, '.', '') ; with Num1(Pos) as -- number of chars in @Lorem ( select cast(1 as int) union all select cast(Pos + 1 as int) from Num1 where Pos < len(@Lorem) ), Words as ( select lower(subssortingng(@Lorem, Pos, charindex(' ', @Lorem + ' ', Pos) - Pos)) as Word from Num1 where Pos <= len(@Lorem) and subssortingng(',' + @Lorem, Pos, 1) = ' ' ), WordsCnt(Factor) as ( select ceiling(cast(@SentenceToGen * @WordsPerSentence as float) / count(*)) from Words ), Num2(Pos) as -- product of words required, to be divided by number of words found in @Lorem ( select cast(1 as int) union all select cast(Pos + 1 as int) from Num2 cross join WordsCnt where Pos < WordsCnt.Factor ), Sentences as ( select ntile(@SentenceToGen) over (order by newid()) as SentenceId, Word from Num2 cross join Words ), Num3(Pos) as -- list of SentenceId ( select distinct SentenceId from Sentences ) select ( select top (@WordsPerSentence) Word + ' ' from Sentences where Sentences.SentenceId = Num3.Pos for xml path('') ) as Sentence from Num3 option (maxrecursion 0) 

Il n'y a rien de construit, mais c'est facile à faire:

 create table DictionaryWords ( Id int primary key identity (1,1), Word nvarchar(100) not null ) go insert DictionaryWords values ('the') insert DictionaryWords values ('quick') insert DictionaryWords values ('brown') insert DictionaryWords values ('fox') insert DictionaryWords values ('jumped') insert DictionaryWords values ('over') insert DictionaryWords values ('the') insert DictionaryWords values ('lazy') insert DictionaryWords values ('dog') go create procedure dbo.CreateRandomText(@numWords int, @text nvarchar(max) out) as begin declare @rowcount int select @rowcount = count(*) from DictionaryWords select @text = '' while @numWords <> 0 select @text = @text + ' ' + Word, @numWords = @numWords - 1 from DictionaryWords where Id = cast(@rowcount * rand() as integer) end go declare @text nvarchar(max) exec CreateRandomText 10, @text out select @text 

Que diriez-vous d'utiliser un outil: Générateur de données de test pour les bases de données MS SQL Server

Non, mais pourquoi n'utilisez-vous pas MS Word pour créer d'abord une list de mots, puis les insert dans la database?

Je ne connais pas la source Word, mais vous pouvez également utiliser le générateur Lorem Ipsum pour générer du text random.

Word extrait d'un dictionary embedded existant n'est-ce pas? De quel jeu de mots allez-vous tirer pour peupler votre table?

En dehors du armsard, je dirais d'importer (en utilisant un file xml / Excel?) Des données composées des mots que vous souhaitez choisir dans une nouvelle table, puis de retirer cette nouvelle table au hasard. Il doit y avoir un file XML existant dans 'le sauvage' que vous pouvez download …

Vous pouvez faire de la colonne un type de données XML et extraire de ce file ou le faire ssortingctement un mot par ligne …

S'amuser…