2017-07-14 978 views
0

標題說明了一切。我需要創建一個表格(ID,名字,姓氏),這些表格將隨機生成一個隨機長度的'單詞',並從我的'字母'創建。每個單詞需要由數據庫隨機生成。整個表應該有1,000,000行。如何在INSERT INTO語句中使用函數[SQL SERVR 2016]

讓我填寫你到目前爲止所做的工作。

  1. 創建一個VIEW,其產生隨機數:

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

  2. 創建一個標量函數從集確定 '字母' 的生成隨機lengh '單詞' :

    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 
    
  3. 現在我想在INSERT INTO子句中使用名爲'WordGenerator'的這個功能,但它根本無法工作,因爲我無法調用它。

我怎麼能說我的功能,每一個時間它應該產生一個新的隨機字?使用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();這就是你所說的標量的方式功能。

SELECT * FROM dbo.WordGenerator();這樣你就可以調用表值函數。

+1

你釘了它!我從未想過這件事。它現在可以工作,我可以打電話給它!謝謝! – PinkMachine

+0

很高興我能幫到你! :) –

+0

請接受@Evaldas答案。這將有助於確保所有其他人不會查看此問題,因爲他已經提供了一個:-) – Isaiah3015