如何使用唯一标识

时间:2017-03-20 12:56:24

标签: sql-server sql-server-2008 duplicates

我有一个名为 table123 的表,大约有80行。它包括“ ID ”,“ First_Name ”,“姓氏”,“ Job_Title ”,“< strong>薪水'和'地址'。

我创建了一个名为 table987 的新表格,它是 table123 的精确副本。这不会破坏任何命令的 table123

table987 中,我想复制所有值,以便每行有2个副本。所以,如果我将“ John ”排成“ First_Name ”,我希望“ John ”的副本完全出现在它在桌子上。

但是,我不希望副本具有相同的“ ID ”。每行应具有唯一的“ ID ”。基本上,每条记录应该有2条,但每条记录都应该有一个唯一的“ ID ”。

我尝试使用以下脚本复制值,但每个副本都与原始记录具有相同的“ ID ”:

INSERT INTO table987 (ID, First_Name, Surname, Job_Title, Salary, Address)
    SELECT ID, First_Name, Surname, Job_Title, Salary, Address
    FROM table123;

是否有一个特定的脚本可以用来以这种方式整理重复项?

2 个答案:

答案 0 :(得分:2)

使用 UNION ALL 并将' ID '设置为自动增量或设置默认值NEWID()

INSERT  INTO dbo.table987 
    ( First_Name ,
      Surname ,
      Job_Title ,
      Salary ,
      Address
    )
    SELECT  First_Name ,
            Surname ,
            Job_Title ,
            Salary ,
            Address
    FROM    dbo.table123
    UNION ALL
    SELECT  First_Name ,
            Surname ,
            Job_Title ,
            Salary ,
            Address
    FROM    dbo.table123

答案 1 :(得分:1)

虽然答案已被接受,但看到上面的评论(“但现在它只是乱七八糟地”),我想添加 ORDER BY 子句查询,它将根据您在上述评论中的要求为您提供有序数据:

DECLARE @table123 table(ID int, First_Name varchar(100),Surname varchar(100),Job_Title varchar(100),Address varchar(100))
DECLARE @table987 table(ID int, First_Name varchar(100),Surname varchar(100),Job_Title varchar(100),Address varchar(100))
INSERT INTO @table123 
VALUES
    (1,'FName1','Surname1','JobTitle1','Address1'),
    (2,'FName2','Surname2','JobTitle2','Address2'),
    (3,'FName3','Surname3','JobTitle3','Address3'),
    (4,'FName4','Surname4','JobTitle4','Address4'),
    (5,'FName5','Surname5','JobTitle5','Address5')

INSERT INTO @table987
SELECT * FROM (
SELECT * FROM @table123
UNION ALL
SELECT * FROM @table123)result ORDER BY ID

SELECT * FROM @table987;

<强>输出:

--------------------------------------------------
|ID  First_Name   Surname    Job_Title   Address |
|------------------------------------------------|
|1    FName1      Surname1   JobTitle1   Address1|
|1    FName1      Surname1   JobTitle1   Address1|
|2    FName2      Surname2   JobTitle2   Address2|
|2    FName2      Surname2   JobTitle2   Address2|
|3    FName3      Surname3   JobTitle3   Address3|
|3    FName3      Surname3   JobTitle3   Address3|
|4    FName4      Surname4   JobTitle4   Address4|
|4    FName4      Surname4   JobTitle4   Address4|
|5    FName5      Surname5   JobTitle5   Address5|
|5    FName5      Surname5   JobTitle5   Address5|
--------------------------------------------------