有两张桌子
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
答案 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
此外,由于在繁忙的流量数据库中同时写入和其他情况,这很容易出现问题。