我知道这方面有几个话题,但没有一个适合我,所以我借此机会再次问你。
我有一个有列的表UserID, FirstName, Lastname
。
我需要为每列插入 300 000 条记录,它们必须是唯一的,例如:
UserID0001, John00001, Doe00001
UserID0002, John00002, Doe00002
UserID0003, John00003, Doe00003
我希望有一个简单的方法:)
先感谢您。
最好的,Lyubo
我知道这方面有几个话题,但没有一个适合我,所以我借此机会再次问你。
我有一个有列的表UserID, FirstName, Lastname
。
我需要为每列插入 300 000 条记录,它们必须是唯一的,例如:
UserID0001, John00001, Doe00001
UserID0002, John00002, Doe00002
UserID0003, John00003, Doe00003
我希望有一个简单的方法:)
先感谢您。
最好的,Lyubo
;with sequence as (
select N = row_number() over (order by @@spid)
from sys.all_columns c1, sys.all_columns c2
)
insert into [Table] (UserID, FirstName, Lastname)
select
'UserID' + right('000000' + cast(N as varchar(10)), 6),
'John' + right('000000' + cast(N as varchar(10)), 6),
'Doe' + right('000000' + cast(N as varchar(10)), 6)
from sequence where N <= 300000
您可以使用 ROW_NUMBER 函数生成不同的数字,如下所示:
MS SQL Server 2008 架构设置:
CREATE TABLE dbo.users(
Id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,
user_id VARCHAR(20),
first_name VARCHAR(20),
last_name VARCHAR(20)
);
GO
DECLARE @NoOfRows INT = 7;
INSERT INTO dbo.users(user_id, first_name, last_name)
SELECT 'User_'+n, 'John_'+n, 'Doe_'+n
FROM(
SELECT REPLACE(STR(ROW_NUMBER()OVER(ORDER BY (SELECT NULL))),' ','0') n FROM(
select TOP(@NoOfRows) 1 x from sys.objects A,sys.objects B,sys.objects C,sys.objects D,sys.objects E,sys.objects F,sys.objects G
)X
)N
查询 1:
SELECT * FROM dbo.users
结果:
| ID | USER_ID | FIRST_NAME | LAST_NAME |
-----------------------------------------------------------
| 1 | User_0000000001 | John_0000000001 | Doe_0000000001 |
| 2 | User_0000000002 | John_0000000002 | Doe_0000000002 |
| 3 | User_0000000003 | John_0000000003 | Doe_0000000003 |
| 4 | User_0000000004 | John_0000000004 | Doe_0000000004 |
| 5 | User_0000000005 | John_0000000005 | Doe_0000000005 |
| 6 | User_0000000006 | John_0000000006 | Doe_0000000006 |
| 7 | User_0000000007 | John_0000000007 | Doe_0000000007 |
只需将 @NoOfRows 更改为 300000 即可获得您要查找的行数。
我改编了这篇文章中的脚本:
DECLARE @RowCount INT
DECLARE @RowString VARCHAR(14)
DECLARE @First VARCHAR(14)
DECLARE @LAST VARCHAR(14)
DECLARE @ID VARCHAR(14)
SET @ID = 'UserID'
SET @First = 'John'
SET @Last = 'Doe'
SET @RowCount = 1
WHILE @RowCount < 300001
BEGIN
SET @RowString = CAST(@RowCount AS VARCHAR(10))
SET @RowString = REPLICATE('0', 6 - DATALENGTH(@RowString)) + @RowString
INSERT INTO TestTableSize (
UserID
,FirstName
,LastName
)
VALUES
(@ID + @RowString
, @First + @RowString
, @Last + @RowString)
SET @RowCount = @RowCount + 1
END