Как создать случайный адрес электронной почты через.Хранимая процедура или функция в SQL Server - PullRequest
0 голосов
/ 03 октября 2018

Я новичок в T-SQL, и у меня есть одно требование, при котором я генерирую миллионы уникальных случайных поддельных электронных идентификаторов электронной почты на сервере SQL с использованием функции или хранимой процедуры.

Используя JAVA, я создал одинПрограмма, которая может генерировать 50 уникальных идентификаторов электронной почты (упомянутых ниже), но я хотел того же в SQL-сервере.

Не могли бы вы помочь мне, как реализовать с помощью T-SQL?Любая помощь будет оценена.

package com.ing.tdm;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.StringTokenizer;

import org.apache.commons.lang3.RandomStringUtils;

public class EmailGenerator {

    public static String getEmailDomains(){
         String randomElement = "";
        String strOfEmailDomains = "aol.com, att.net, comcast.net, facebook.com, gmail.com, gmx.com, googlemail.com, google.com, hotmail.com, hotmail.co.uk, mac.com, me.com, mail.com, msn.com, live.com, sbcglobal.net, verizon.net, yahoo.com, yahoo.co.uk, email.com, fastmail.fm, games.com, gmx.net, hush.com, hushmail.com, icloud.com, iname.com, inbox.com, lavabit.com, love.com , outlook.com, pobox.com, protonmail.com, rocketmail.com, safe-mail.net, wow.com , ygm.com , ymail.com, zoho.com, yandex.com, bellsouth.net, charter.net, cox.net, earthlink.net, juno.com, btinternet.com, virginmedia.com, blueyonder.co.uk, freeserve.co.uk, live.co.uk, ntlworld.com, o2.co.uk, orange.net, sky.com, virgin.net, wanadoo.co.uk, bt.com, sina.com, sina.cn, qq.com, naver.com, hanmail.net, daum.net, nate.com, yahoo.co.jp, yahoo.co.kr, yahoo.co.id, yahoo.co.in, yahoo.com.sg, yahoo.com.ph, 163.com, 126.com, aliyun.com, foxmail.com, hotmail.fr, live.fr, laposte.net, yahoo.fr, wanadoo.fr, orange.fr, gmx.fr, sfr.fr, neuf.fr, free.fr, gmx.de, hotmail.de, live.de, online.de, t-online.de , web.de, yahoo.de, libero.it, virgilio.it, hotmail.it, aol.it, tiscali.it, alice.it, live.it, yahoo.it, email.it, tin.it, poste.it, teletu.it, mail.ru, rambler.ru, yandex.ru, ya.ru, list.ruhotmail.be, live.be, skynet.be, voo.be, tvcablenet.be, telenet.be, hotmail.com.ar, live.com.ar, yahoo.com.ar, fibertel.com.ar, speedy.com.ar, arnet.com.ar, yahoo.com.mx, live.com.mx, hotmail.es,yahoo.com.ar, fibertel.com.ar, speedy.com.ar, arnet.com.ar, yahoo.com.mx, live.com.mx, hotmail.es, hotmail.com.mx, prodigy.net.mx, yahoo.com.br, hotmail.com.br, outlook.com.br, uol.com.br, bol.com.br, terra.com.br, ig.com.br, itelefonica.com.br, r7.com, zipmail.com.br, globo.com, globomail.com, oi.com.br";
        StringTokenizer st = new StringTokenizer(strOfEmailDomains, ",");
        Random rand = new Random();

        List<String> givenList = new ArrayList<String>();

        while(st.hasMoreElements()){
            String emaildomain = (String) st.nextElement();
            givenList.add(emaildomain);
        }

        if(null!=givenList && givenList.size() > 0){
            int randomIndex = rand.nextInt(givenList.size());
              randomElement = givenList.get(randomIndex);
        }

        return randomElement;

    }


public static String generateRandomEmail(int length) {
    String emailId = "";
    String allowedChars = "abcdefghijklmnopqrstuvwxyz" + "1234567890";
    String allowedSpecialChars = "_-.";

    String temp = RandomStringUtils.random(length, allowedChars);
    emailId = (temp.substring(0, temp.length() - 9)
            +Character.toString((RandomStringUtils.random(length, allowedSpecialChars)).charAt(0))
            +temp.substring(12, 18)
            +"@"+getEmailDomains()).replaceAll("\\s","");

    System.out.println(emailId);
    return emailId;
}

public static void main(String[] args) {
    for (int i = 0; i < 50; i++) {
        generateRandomEmail(20);
    }
}

}

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Вы можете CROSS JOIN с помощью NEWID(), чтобы создать большое количество адресов электронной почты.Он генерирует более 30 тыс. Электронных писем за раз, пока не достигнет или не превысит целевого числа. Для того, чтобы набрать 1019304 адресов электронной почты, требуется около одной секунды (демонстрация: http://rextester.com/GJS41165)

DECLARE @targetCount INT = 1000000

CREATE TABLE #emailTableTemp (fakeEmail VARCHAR(100))

WHILE (SELECT COUNT(1) FROM #emailTableTemp) < @targetCount
BEGIN
    INSERT INTO #emailTableTemp
    SELECT CONCAT(t2.prefix,t1.email) AS fakeEmail FROM 
    (VALUES ('aol.com'),('att.net'),('comcast.net'),('facebook.com'),('gmail.com'),('gmx.com'),('googlemail.com'),('google.com'),('hotmail.com'),('hotmail.co.uk'),('mac.com'),('me.com'),('mail.com'),('msn.com'),('live.com'),('sbcglobal.net'),('verizon.net'),('yahoo.com'),('yahoo.co.uk'),('email.com'),('fastmail.fm'),('games.com'),('gmx.net'),('hush.com'),('hushmail.com'),('icloud.com'),('iname.com'),('inbox.com'),('lavabit.com'),('love.com '),('outlook.com'),('pobox.com'),('protonmail.com'),('rocketmail.com'),('safe-mail.net'),('wow.com '),('ygm.com '),('ymail.com'),('zoho.com'),('yandex.com'),('bellsouth.net'),('charter.net'),('cox.net'),('earthlink.net'),('juno.com'),('btinternet.com'),('virginmedia.com'),('blueyonder.co.uk'),('freeserve.co.uk'),('live.co.uk'),('ntlworld.com'),('o2.co.uk'),('orange.net'),('sky.com'),('virgin.net'),('wanadoo.co.uk'),('bt.com'),('sina.com'),('sina.cn'),('qq.com'),('naver.com'),('hanmail.net'),('daum.net'),('nate.com'),('yahoo.co.jp'),('yahoo.co.kr'),('yahoo.co.id'),('yahoo.co.in'),('yahoo.com.sg'),('yahoo.com.ph'),('163.com'),('126.com'),('aliyun.com'),('foxmail.com'),('hotmail.fr'),('live.fr'),('laposte.net'),('yahoo.fr'),('wanadoo.fr'),('orange.fr'),('gmx.fr'),('sfr.fr'),('neuf.fr'),('free.fr'),('gmx.de'),('hotmail.de'),('live.de'),('online.de'),('t-online.de '),('web.de'),('yahoo.de'),('libero.it'),('virgilio.it'),('hotmail.it'),('aol.it'),('tiscali.it'),('alice.it'),('live.it'),('yahoo.it'),('email.it'),('tin.it'),('poste.it'),('teletu.it'),('mail.ru'),('rambler.ru'),('yandex.ru'),('ya.ru'),('list.ruhotmail.be'),('live.be'),('skynet.be'),('voo.be'),('tvcablenet.be'),('telenet.be'),('hotmail.com.ar'),('live.com.ar'),('yahoo.com.ar'),('fibertel.com.ar'),('speedy.com.ar'),('arnet.com.ar'),('yahoo.com.mx'),('live.com.mx'),('hotmail.es,yahoo.com.ar'),('fibertel.com.ar'),('speedy.com.ar'),('arnet.com.ar'),('yahoo.com.mx'),('live.com.mx'),('hotmail.es'),('hotmail.com.mx'),('prodigy.net.mx'),('yahoo.com.br'),('hotmail.com.br'),('outlook.com.br'),('uol.com.br'),('bol.com.br'),('terra.com.br'),('ig.com.br'),('itelefonica.com.br'),('r7.com'),('zipmail.com.br'),('globo.com'),('globomail.com'),('oi.com.br')) t1(email)
    CROSS JOIN (VALUES 
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),        
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),        
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),        
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),
        (CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@')),(CONCAT(REPLACE(CONVERT(VARCHAR(50), NEWID()),'-',''),'@'))
        ) t2(prefix)
END

SELECT COUNT(1) FROM #emailTableTemp
SELECT TOP 10 * FROM #emailTableTemp ORDER BY fakeEmail

DROP TABLE #emailTableTemp
0 голосов
/ 03 октября 2018

Привет, я придумал гораздо более сложное решение, но я думаю, что оно лучше соответствует вашим потребностям.

У меня есть три временные таблицы:

  • emailДобавьте список всех доменов сids
  • allowChar список всех символов с идентификаторами
  • allowSpecialChar список всех специальных символов с идентификаторами

После создания таблиц, которые я генерирую с помощью рекурсиваcte 50 строк (вы можете сделать больше, если хотите) со случайными длинами электронной почты и mailid.Затем я генерирую для каждого символа в почте случайный идентификатор в ранчо идентификаторов в таблице allowChar.Затем я соединяю таблицу allowChar с сгенерированным идентификатором и объединяю одиночные символы с «для пути xml» в одной строке.Для emailDomain и allowSpecialChar я делаю это примерно так же.В завершение я согласую все с действительным адресом электронной почты.

--setup emailDomain table
if OBJECT_ID('tempdb..#emailDomain') is not NULL
    drop table #emailDomain

create table #emailDomain (
    id int IDENTITY(1,1) PRIMARY KEY,
    domain varchar(50) not null
)

insert into #emailDomain
--id is automatic generated
values('aol.com')
     ,('att.net')
     ,('comcast.net')
     ,('facebook.com')
     ,('gmail.com')
     ,('gmx.com')

--setup allowedChar table
if OBJECT_ID('tempdb..#allowedChar') is not NULL
    drop table #allowedChar

create table #allowedChar(
    id int IDENTITY(1,1) PRIMARY KEY,
    aChar char(1) not null
)

insert into #allowedChar
values('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j'),('k'),('l'),('m'),('n'),('o'),('p'),('q')
,('r'),('s'),('t'),('u'),('v'),('w'),('x'),('y'),('z'),('1'),('2'),('3'),('4'),('5'),('6'),('9'),('7'),('0'),('8')

--setup allowedSpecialChar table
if OBJECT_ID('tempdb..#allowedSpecialChar') is not NULL
    drop table #allowedSpecialChar

create table #allowedSpecialChar(
    id int IDENTITY(1,1) PRIMARY KEY,
    asChar char(1)
)

insert into #allowedSpecialChar
VALUES('_'),('-'),('.')

declare @countDomains as int = (select count(*) from #emailDomain)
declare @countallowedChars as int = (select count(*) from #allowedChar)
declare @countallowedSpecialChars as int = (select count(*) from #allowedSpecialChar);

if OBJECT_ID('tempdb..#rowsWithRandomCharsNrs') is not NULL
    drop table #rowsWithRandomCharsNrs;

--generate with recursion 50 rows, with an id and a random length for the e-mail address
with 
baseRowsWithEmailLength as (
    select 1 as idMail, round(RAND(CHECKSUM(NEWID())) * 60 + 1,0) as strLength
    union all
    select idMail + 1 as idMail, round(RAND(CHECKSUM(NEWID())) * 60 + 1,0) as strLength
    from baseRowsWithEmailLength 
    where idMail < 50
)
--generate with recursion a random number (indexChar) for every char in the string, which is an id to join with the table allowedChar
,rowsWithRandomCharsNrs as(
    select idMail, strLength, 1 as idchar,  round(RAND(CHECKSUM(NEWID())) * (@countallowedChars-1) +1,0) as indexChar
    from baseRowsWithEmailLength
    union all
    select idMail, strLength, idchar + 1 as idchar,  round(RAND(CHECKSUM(NEWID())) *(@countallowedChars-1) +1,0) as indexChar
    from rowsWithRandomCharsNrs
    where idchar < strLength
)


select *
into #rowsWithRandomCharsNrs
from rowsWithRandomCharsNrs


SELECT idMail  
      ,concat(left(mailRandStr, firstMailPartLength),aspc.asChar,RIGHT(mailRandStr, StrLength - firstMailPartLength), '@', ed.domain) as Mail
FROM(
    SELECT idMail
          ,strLength
          ,firstMailPartLength
          ,mailRandStr
          --generate a random number to join a random Domain and specialchar
          ,round(RAND(CHECKSUM(NEWID())) * (@countDomains-1) +1,0) as idDomain
          ,round(RAND(CHECKSUM(NEWID())) * (@countallowedSpecialChars-1) +1,0) as idSpecialChar
    FROM (
        SELECT DISTINCT
               idMail
              ,StrLength
              ,round(StrLength * 0.75,0) as firstMailPartLength 
              --concat all chars to a single string via for xml path
              ,(
                 select ''+ac.aChar
                 from #rowsWithRandomCharsNrs sub
                 join #allowedChar ac on sub.indexChar = ac.id
                 where sub.idMail = m.idMail
                 FOR XML PATH('')
              )as mailRandStr
        FROM #rowsWithRandomCharsNrs m
    ) sub
)sub
left join #emailDomain ed on sub.idDomain = ed.id
left join #allowedSpecialChar aspc on sub.idSpecialChar  = aspc.id

У вас есть вопросы?Я помогаю тебе.

0 голосов
/ 03 октября 2018

Если вы действительно хотите сделать это с помощью SQL, попробуйте один из следующих подходов ...

DECLARE @randomString VARCHAR(255)
SELECT
  @randomString = CONVERT(VARCHAR(255), NEWID())
PRINT @randomString

ИЛИ

DECLARE @Length INT = 25
PRINT LEFT(REPLACE(NEWID(), '-', ''), @Length)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...