如何为没有PK的SQL Server表中的每个唯一行分配一个数字?

时间:2019-07-18 16:48:53

标签: sql sql-server

我有一张桌子,每天都有多个工作记录。没有主键的原因是因为有多个记录显示每个工人每天,每个人工作几天。

我编写了一个查询,该查询使用“ into”将其放入表中。查询非常复杂,因此我认为只修改表会更容易。

我不会有任何问题,但是表将返回重复的行。如果我可以为每个唯一的行分配一个数字(或者如果还有另一种方法会更好),那么我可以选择唯一的ID号,并且不会重复。

我尝试过select distinct *,但是它不起作用。

这是桌子:

CREATE TABLE [dbo].[liaisonperformance](
    [sr_name] [varchar](50) NULL,
    [workdate] [date] NULL,
    [Calls_in] [int] NULL,
    [Calls_Out] [int] NULL,
    [Chats] [int] NULL,
    [reaches] [int] NULL,
    [books] [int] NULL,
    [attends] [int] NULL,
    [hoursworked] [float] NULL
) ON [PRIMARY]
GO

2 个答案:

答案 0 :(得分:0)

您可能想使用跨越多个列的主键,例如sr_name和workdate。 一种替代解决方案是拥有一列id INT IDENTITY(1,1) PRIMARY KEY。第二种解决方案称为代理密钥,而第一种是自然密钥(我假设sr_name和workdate的组合始终是唯一的)

答案 1 :(得分:0)

我建议将表定义为:

CREATE TABLE [dbo].[liaisonperformance] (
    liaisonperformance_id int identity primary key,
    [sr_name] [varchar](50) NULL,
    [workdate] [date] NULL,
    [Calls_in] [int] NULL,
    [Calls_Out] [int] NULL,
    [Chats] [int] NULL,
    [reaches] [int] NULL,
    [books] [int] NULL,
    [attends] [int] NULL,
    [hoursworked] [float] NULL
) ;

如果您使用的是select . . . into,请使用identity() function

select identity(int, 1, 1) as liaisonperformance_id,
       . . .
into liaisonperformance_id
from . . .;