插入(选择)而不是自动增量

时间:2016-12-10 18:38:40

标签: sql sql-server tsql

有两张桌子

CREATE TABLE [dbo].[TABELAA]
(
    [ID] [bigint] NOT NULL,
    [PodatakA] [nvarchar](50) NULL,
    [PodatakB] [nvarchar](50) NULL,

    CONSTRAINT [PK_TABELAA] 
       PRIMARY KEY CLUSTERED ([ID] ASC)
                   WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                         IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                         ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[TABELAB]
(
    [PodatakX] [nvarchar](50) NULL,
    [PodatakY] [nvarchar](50) NULL
) ON [PRIMARY]
GO

我需要在tabelaB中将值从tabelaB插入tabelaA并使用自动生成ID,所以我需要这样的东西。但如果只有一行,这将是很好的。我在谈论成千上万的行应该自动生成id,就像AutoIncrement(1)

一样

无用的尝试,我认为我应该使用OVER

INSERT INTO TABELAA 
    SELECT 
        (SELECT MAX(id) + 1 FROM TabelaA) AS Id, * 
    FROM
        tabelaB

2 个答案:

答案 0 :(得分:1)

您正在寻找IDENTITY

CREATE TABLE [dbo].[TABLAAA](
    [ID] [bigint] IDENTITY(1, 1) PRIMARY KEY,  -- NOT NULL is handled by PRIMARY KEY
    [PodatakA] [nvarchar](50) NULL,
    [PodatakB] [nvarchar](50) NULL
);

INSERT INTO TABLEAA (PodatakA, PodatakB)
    SELECT PodatakA, PodatakB
    FROM TABLEBB;

答案 1 :(得分:0)

我同意Rahul的评论和Gordon,如果你可以修改你的架构,那么最有意义的是添加一个Identity Column。但是,如果你不能,你仍然可以使用几种方法完成你想要的任务。

一种方法是获取MAX的{​​{1}} ID,然后像这样添加TableAA

ROW_NUMBER()

再次,这将解决最理想的解决方案是指定IDENTITY

此外,由于在繁忙的流量数据库中同时写入和其他情况,这很容易出现问题。