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.

扩展了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值永远是唯一的,所以要小心.