gpt4 book ai didi

sql-server - 在 SQL Server 中插入随机数

转载 作者:行者123 更新时间:2023-12-03 12:58:25 25 4
gpt4 key购买 nike

我有下表

create table MBR_IDS
(
MBR_SLNO int identity(1,1),
MBR_ID int
)
GO

ALTER TABLE MBR_IDS
ADD CONSTRAINT UNIQUE_MBR_ID
UNIQUE NONCLUSTERED (MBR_ID)

和下面的存储过程来创建一个随机数

CREATE PROCEDURE USP_RANDOM_6
AS
BEGIN
DECLARE @chars NCHAR(36)
SET @chars = N'0123456789'

DECLARE @result NCHAR(6)
SET @result = SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)
+ SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)
+ SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)
+ SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)
+ SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)
+ SUBSTRING(@chars, CAST((RAND() * LEN(@chars)) AS INT) + 1, 1)

SELECT @result
END
GO

当我通过存储过程插入一个值时:

declare @row int
set @row =1

while (@row <= 1000)
begin
insert into MBR_IDS
values(USP_RANDOM_6)

set @row = @row + 1
end
GO

我收到这个错误:

enter image description here

最佳答案

一种选择是创建函数而不是存储过程。

您可以通过在表中捕获返回值来对存储过程执行您想要的操作:

create table #retval (val nchar(6));
declare @row int = 1;
while (@row <= 1000)
begin
truncate table #retval;

insert into #retval
exec USP_RANDOM_6;

insert into MBR_IDS
select val
from #retval;
set @row=@row + 1
end;

实际上,如果你把它存储在一个表中,你可以把所有的东西都放到一个临时表中,然后只做一次插入:

create table #retval (val nchar(6));
declare @row int = 1;
while (@row <= 1000)
begin
insert into #retval
exec USP_RANDOM_6;

set @row = @row + 1;
end;

insert into MBR_IDS
select val
from #retval;

编辑:

我不知道这个操作哪个更快,存储过程还是函数。但是,我不会使用任何一个。我会简单地做:

declare @row int = 1;
while (@row <= 1000)
begin
insert into MBR_IDS
select replace(str(checksum(newid())%1000000, 6, 0), ' ', '0')
set @row=@row + 1
end;

这使用 newid() 来计算一个新的长字符串。然后它采用 checksum(),它应该是一个随机的 4 字节数字,以一百万为模。剩下的只是对其进行格式化,使其成为一个以“0”为前缀的 6 位字符串。

还有,不知道在上面的构造中引入临时表的时候是怎么想的。更简单的方法是:

declare @row int = 1;
while (@row <= 1000)
begin
insert into MBR_IDS
exec USP_RANDOM_6;;
set @row=@row + 1
end;

关于sql-server - 在 SQL Server 中插入随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17772083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com