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 值将始终是唯一的,所以要小心。
我的 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 值将始终是唯一的,所以要小心。