SQL Server列的默认随机10个字符的字符串值

Flo*_*Flo 1 sql-server random default-value sql-server-2014

rndm我的桌子上有一栏[客人].现在,对于Default value or Binding表的字段,无论何时插入新行,我都希望自动将10个字符的随机字符串插入此列作为默认值.

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

要明确:我不想在我的.NET代码中生成这个随机字符串,我希望它在SQL Server中生成.我想将此字符串生成直接粘贴到Default value or Binding表的字段中,因此不是单独的SQL语句.因此,例如它在粘贴getdate()到田地 时起作用Default value or Binding.

在此输入图像描述

M.A*_*Ali 6

扩展了Deigo Garbar已经提出的建议.

如果要将表达式用作表中的默认值,则需要将此表达式放在函数中.

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

一种方法是先创建一个视图,然后简单地调用该表达式,然后在函数中使用该视图,然后将该函数用作表的默认值.

视图

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

功能

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
Run Code Online (Sandbox Code Playgroud)

现在,您可以将此函数用作表中的默认值.

测试

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
Run Code Online (Sandbox Code Playgroud)

重要的提示

我不相信这部分GUID值永远是唯一的,所以要小心.