如何在 sql server 中生成随机 nvarchars

Posted

技术标签:

【中文标题】如何在 sql server 中生成随机 nvarchars【英文标题】:How to generate random nvarchars in sql server 【发布时间】:2017-10-17 16:04:02 【问题描述】:

我通过本网站上的一些链接创建了一个存储过程,如下所示:How to insert Huge dummy data to Sql serverWhat is the most efficient way to generate 8 character random alphanumeric string in TSQL?

我的存储过程:

IF  EXISTS (SELECT 1 FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[DUMMY_INSERT]') AND type in (N'P', N'PC'))
BEGIN
    DROP PROCEDURE  DUMMY_INSERT
END
GO
CREATE PROCEDURE DUMMY_INSERT (
@noOfRecords INT
)
AS
BEGIN

DECLARE @r varchar(8)

SELECT @r = coalesce(@r, '') +CHAR(
CASE WHEN r between 0 and 9 THEN 48
WHEN r between 10 and 35 THEN 55
ELSE 61 END + r)
FROM
master..spt_values
CROSS JOIN
(SELECT CAST(RAND(ABS(CHECKSUM(NEWID()))) *61 as int) r) a
WHERE type = 'P' AND number < 8

DECLARE @count int
SET @count = 1;

WHILE (@count < @noOfRecords)
BEGIN
    INSERT INTO Tbl_Customer(name)
     VALUES(@r);

     SET @count = @count + 1;
END
END

执行时,它将插入@noOfRecords(由用户提供)与@r生成的相同名称的记录。如何为每个生成的记录制作@r 不同随机 nvarchar。

【问题讨论】:

您是想找到一种方法来生成随机字符串还是要调试提供的代码。还有许多其他方法可以实现这一目标。 总是提到你正在使用的数据库或软件的版本 我正在尝试在表中插入例如 100000 个不同的名称。我想使用 sql 性能并需要在我的表中使用大数据。 我正在使用 MS SQL Server 2014 使用a-zA-Z的全范围重要吗?要生成 8 个字符的随机字母数字字符串,您可以使用 CONVERT(CHAR(8),CRYPT_GEN_RANDOM(4),2),虽然排列更少(因为仅使用十六进制字符),但它更简单 【参考方案1】:

尝试适应以下 sn-p 的需求:

IF OBJECT_ID(N'dbo.DUMMY_INSERT', N'P') IS NOT NULL DROP PROCEDURE dbo.DUMMY_INSERT;
GO
CREATE PROCEDURE dbo.DUMMY_INSERT(@noOfRecords INT, @chars INT = 8) AS
WITH
  cc AS(SELECT 1 c UNION ALL SELECT c + 1 FROM cc WHERE c < @chars),
  rr AS(SELECT 1 r UNION ALL SELECT r + 1 FROM rr WHERE r < @noOfRecords),
  rc AS(SELECT r, ABS(CHECKSUM(NEWID())) % 61 rnd FROM rr CROSS JOIN cc)
  SELECT
    (SELECT NCHAR(IIF(rnd < 10, 48, IIF(rnd < 36, 55, 61))) [text()]
     FROM rc WHERE rc.r = rr.r
     FOR XML PATH('')) rndrow
  FROM rr;
GO
IF OBJECT_ID(N'dbo.Tbl_Customer', N'U') IS NOT NULL DROP TABLE dbo.Tbl_Customer;
GO
CREATE TABLE dbo.Tbl_Customer(name NVARCHAR(30));
GO
INSERT dbo.Tbl_Customer(name) EXEC dbo.DUMMY_INSERT 20;
GO
SELECT name FROM dbo.Tbl_Customer;

【讨论】:

以上是关于如何在 sql server 中生成随机 nvarchars的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Server 中生成日期范围

如何在 SQL Server 中生成唯一递增的整数值?

如何使用存储过程在 SQL Server 中生成表的数据脚本文件?

sql 在mysql #mysql中生成随机字符串

在 SQL Server 中生成周末日期

在 SQL Server 2005 中生成多个 SQL 任务