3

我知道这方面有几个话题,但没有一个适合我,所以我借此机会再次问你。

我有一个有列的表UserID, FirstName, Lastname

我需要为每列插入 300 000 条记录,它们必须是唯一的,例如:

UserID0001, John00001, Doe00001
UserID0002, John00002, Doe00002
UserID0003, John00003, Doe00003

我希望有一个简单的方法:)

先感谢您。

最好的,Lyubo

4

3 回答 3

3
;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
于 2013-08-09T14:53:26.783 回答
3

您可以使用 ROW_NUMBER 函数生成不同的数字,如下所示:

SQL小提琴

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 即可获得您要查找的行数。

于 2013-08-09T14:54:07.897 回答
1

我改编了这篇文章中的脚本:

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
于 2013-08-09T14:47:51.457 回答