我有一个专栏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....
解决方法是首先创建一个视图,该视图仅调用此表达式,然后在函数内使用该视图,然后使用该函数作为表的默认值。
View
CREATE VIEW dbo.vw_Function_Base
AS
SELECT substring(replace(convert(varchar(100), NEWID()), '-', ''), 1, 10) AS Rand_Value
Function
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
现在您可以使用此函数作为表中的默认值。
Test
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 值的这一部分将始终是唯一的,所以要小心。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)