2017-07-14 2 views
0

タイトルはすべてです。ランダムな長さを持ち、私の 'アルファベット'から作成された無作為に生成された '単語'が入力されるテーブル(ID、FirstName、LastName)を作成する必要があります。各単語は、DBによってランダムに生成される必要があります。テーブル全体には1,000,000行が必要です。INSERT INTOステートメントでの関数の使用方法[SQL SERVR 2016]

私がこれまで行ってきたことを記入してください。決定した '手紙' のセットからランダムlenghという言葉 'を生成スカラー関数を作成し

CREATE VIEW [dbo].[RANDOM] AS SELECT RAND() RandomResult

  • :乱数を生成VIEWを作成し

    1. CREATE FUNCTION [dbo].[WordGenerator] (@RandomWord VARCHAR(MAX)) 
          RETURNS VARCHAR(MAX) 
          AS BEGIN 
      
          DECLARE @Alphabet VARCHAR(33) = 'abcdefghijklmnoprstuówxyzęąśłżźćń', 
            @StrLength INT, 
            @LoopCount INT, 
            @RandomString VARCHAR(MAX), 
            @AlphabetLength INT; 
      
          SELECT @StrLength = (SELECT RandomResult FROM dbo.Random) * 4 + 7, @LoopCount = 0, @RandomString = '', @AlphabetLength = LEN(@Alphabet); 
      
          WHILE (@LoopCount < @StrLength) 
            BEGIN 
             SELECT @RandomString = @RandomString + SUBSTRING(@Alphabet, CONVERT(INT, (SELECT RandomResult FROM dbo.Random) * @AlphabetLength), 1) 
             SET @LoopCount = @LoopCount + 1; 
            END 
      
          RETURN @RandomString; 
      END 
      
    2. 今は、この関数を 'WordGenerator'というINSERT INTO句で使用したいと思いますが、呼び出すことができないため機能しません。

    どのように私は毎回は、新しい、ランダムな単語を生成することになっている私の機能呼び出すことができますか?

    SELECT TOP 1 RandomWord FROM dbo.WordGenerator()を使用すると機能しません。

    SELECT dbo.WordGenerator()を使用すると機能しません。

    SELECT * FROM dbo.WordGenerator()を使用すると機能しません。

    アイデア?

  • +1

    これはテーブル値関数ではありません。 SELECT dbo.WordGenerator()を呼び出すだけで、そこにパラメータがある理由がわかりません。 – pmbAustin

    答えて

    1

    問題は、あなたの関数が使用されることはないとして渡されていないパラメータを期待していることであるので、それを変更します。

    CREATE FUNCTION [dbo].[WordGenerator]() 
    RETURNS VARCHAR(MAX) 
    AS 
    BEGIN 
        DECLARE @Alphabet VARCHAR(33) = 'abcdefghijklmnoprstuówxyzęąśłżźćń', 
        DECLARE @StrLength INT; 
        DECLARE @LoopCount INT; 
        DECLARE @RandomString VARCHAR(MAX); 
        DECLARE @AlphabetLength INT; 
    
        SELECT @StrLength = RandomResult * 4 + 7, @LoopCount = 0, @RandomString = '', @AlphabetLength = LEN(@Alphabet) 
        FROM dbo.Random; 
    
        WHILE @LoopCount < @StrLength 
        BEGIN 
         SELECT @RandomString = @RandomString + SUBSTRING(@Alphabet, CONVERT(INT, RandomResult * @AlphabetLength), 1) 
         FROM dbo.Random; 
    
         SET @LoopCount += 1; 
        END; 
    
        RETURN @RandomString; 
    END; 
    

    そして、ちょうどそのようにそれを呼び出す:SELECT dbo.WordGenerator();それはあなたがスカラー呼び出す方法です関数。

    このようにして、テーブル値関数を呼び出します。

    +1

    あなたはそれを釘付け!私はそれについて考えたことはありません。それは今働く、私はそれを呼び出すことができます!ありがとう! – PinkMachine

    +0

    うれしい私は助けることができました! :) –

    +0

    @Evaldasの回答を受け入れてください。これは、すでに他の人に提供しているので、他の人がこの質問を表示しないようにするのに役立ちます:-) – Isaiah3015

    関連する問題