Автоматическое присвоение случайной строки новым записям - PullRequest
0 голосов
/ 14 апреля 2009

У меня уже есть таблица клиентов, но теперь новым записям необходимо присваивать уникальную случайную буквенно-цифровую строку из 100 символов в новом столбце Есть ли в любом случае я могу сделать это без использования триггера (при вставке?)

Ответы [ 4 ]

2 голосов
/ 14 апреля 2009

Ограничение по умолчанию, вызывающее функцию, будет работать лучше всего. Однако вы должны проверить, сколько записей вы будете создавать.

Хотя 5 символов может быть более чем достаточно для однозначного определения предполагаемого количества записей (если предположить, что AZ составляет 0-9, это около 60 миллионов кодов), когда вы начнете случайным образом генерировать их, вы можете обнаружить, что вы нажали * парадокс дня рождения довольно быстро.

0 голосов
/ 14 апреля 2009

У меня была похожая ситуация, но я генерировал строку в коде и затем отправлял ее в БД. Конечно, это используется на очень маленьком столе, поэтому я не беспокоился о скорости. Думаю, это может помочь, хотя предполагается, что вы используете c #.

    /// Generates a string and checks for existance
    /// <returns>Non-existant string as ID</returns>
    public static string GetRandomNumbers(int numChars, string Type)
    {
        string result = string.Empty;
        bool isUnique = false;

        while (!isUnique)
        {
            //Build the string
            result = MakeID(numChars);
            //Check if unsued
            isUnique = GetValueExists(result, Type);
        }
        return result;
    }
    /// Builds the string 
    public static string MakeID(int numChars)
    {
        string random = string.Empty;

        string[] chars = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" };
        Random rnd = new Random();
        for (int i = 0; i < numChars; i++)
        {
            random += chars[rnd.Next(0, 35)];
        }
        return random;

    }
    /// Checks database tables based on type for existance, if exists then retry
    /// <returns>true or false</returns>
    private static bool GetValueExists(string value, string Type)
    {
        bool result = false;

        string sql = "";
        if (Type == "URL")
        {
            sql = string.Format(@"IF EXISTS (SELECT COUNT(1) FROM myTable WHERE uniqueString = '{0}') 
            BEGIN 
                SELECT 1 
            END  
            ELSE  
            BEGIN 
                SELECT 0 
            END ", value);
        }
        //query the DB to see if it's in use
        result = //ExecuteSQL

        return result;
    }
0 голосов
/ 14 апреля 2009

Для триггера: Ну .. я бы использовал триггер Преимущество работы с предыдущим кодом.

Но вы также можете создать хранимую процедуру, которая обернет ваш вставляет в таблицу.

Для уникальных 5 символов: Вы можете создать MD5 поверх вашего начального набора и, возможно, времени, затем перекодировать его из базы 10 в базу 255.

Остатки можно обрезать.

0 голосов
/ 14 апреля 2009

Вы можете использовать ограничение по умолчанию, которое вызывает функцию, которая генерирует вашу случайную строку.

...