我已经有了一个客户表,但是从现在开始,必须在新列中为新记录分配一个唯一的5个字符的随机字母数字字符串。无论如何,我可以做到这一点而不必使用Trigger(插入?)
答案 0 :(得分:2)
调用函数的默认约束最有效。但是,您应该检查要创建的记录数。
虽然5个字符可能足以唯一地标识您的预期记录数(假设AZ,0-9我认为大约有6千万个代码),当您开始随机生成它们时,您可能会发现您点击了{{ 3}}相当快。
答案 1 :(得分:0)
您可以使用默认约束来调用生成随机字符串的函数。
答案 2 :(得分:0)
触发器: 嗯..我会使用触发器 它具有使用以前代码的优势。
但是你也可以创建一个包装你的存储过程 插入表格。
对于唯一的5个字符: 您可以在初始设置上创建一个md5,也许是时间, 然后将它从基数10重新编码为255。
残羹剩饭可以被截断。
答案 3 :(得分:0)
我有类似的情况但是在代码中生成字符串然后将其发送到数据库。当然这用在一张非常小的桌子上,所以我不担心速度。认为它可能会有所帮助,但它假设您使用的是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;
}