SQL 服务器列的默认随机 10 个字符串值

Default random 10 character string value for SQL Server column

我的 table [来宾] 中有一列 rndm。现在,对于 table 的字段 Default value or Binding,每当插入新行时,我想自动将 10 个字符的随机字符串作为默认值插入到该列中。

此随机字符串可能不包含特殊字符,仅包含 a-zA-Z0-9 中的字符。实现此目标的最佳方法是什么?

明确一点:我不想在我的 .NET 代码中生成这个随机字符串,我希望它在 SQL 服务器中生成。我想将此字符串生成直接粘贴到 table 的字段 Default value or Binding 中,而不是单独的 SQL 语句。因此,例如将 getdate() 粘贴到字段 Default value or Binding.

时它会起作用

SELECT SUBSTRING(REPLACE(CONVERT(varchar, NEWID()), '-', ''), 1, 10)

扩展 Deigo Garbar 已经提出的建议。

如果您想使用表达式作为 table 中的默认值,您需要将此表达式放入函数中。

但问题是 UDF 函数不允许您在其中使用 NEWID() 函数,它会抱怨不能在 UDF 中使用非确定性函数 bla bla....

一种解决方法是首先创建一个视图,它只调用此表达式,然后在您的函数中使用该视图,然后将该函数用作您的 table 的默认值。

查看

CREATE VIEW dbo.vw_Function_Base
AS
SELECT substring(replace(convert(varchar(100), NEWID()), '-', ''), 1, 10) AS Rand_Value

函数

CREATE FUNCTION dbo.fn_getRandom_Value()
RETURNS VARCHAR(10)
AS
BEGIN
  DECLARE @Rand_Value VARCHAR(10);
SELECT @Rand_Value = Rand_Value
FROM vw_Function_Base

  RETURN @Rand_Value;
END

现在您可以将此函数用作 table 中的默认值。

测试

CREATE TABLE SomeTest_Table
 ( ID        INT
 , RandValue VARCHAR(10) DEFAULT dbo.fn_getRandom_Value()
 )
GO

 INSERT INTO SomeTest_Table(ID)
 VALUES (1)
GO

 SELECT * FROM SomeTest_Table

重要提示

我不相信这部分 GUID 值将始终是唯一的,所以要小心。