Sql 将自动增量列添加到现有表并创建外键

Sql 将自动增量列添加到现有表并创建外键,sql,sql-server,foreign-keys,auto-increment,Sql,Sql Server,Foreign Keys,Auto Increment,我正在使用SQL Server 2014。有两个带有关系数据的表T1和T2。这些表有100000多行 T1有一个主键ID(varchar),并且T2被映射到此ID(varchar) 我想将另一个自动递增列AutoId(int)添加到表T1,我还想将列AutoId添加到表T2 然后我想根据现有的ID更新T2中的AutoId 解决这个问题最简单的方法是什么?您可以在插入后使用触发器 This is for new Records CREATE TRIGGER [schema_name.]trigg

我正在使用SQL Server 2014。有两个带有关系数据的表
T1
T2
。这些表有100000多行

T1
有一个主键
ID
varchar
),并且
T2
被映射到此
ID
varchar

我想将另一个自动递增列
AutoId
int
)添加到表
T1
,我还想将列
AutoId
添加到表
T2

然后我想根据现有的
ID
更新
T2
中的
AutoId


解决这个问题最简单的方法是什么?

您可以在插入后使用触发器

This is for new Records

CREATE TRIGGER [schema_name.]trigger_name
ON table_name
AFTER  {[INSERT],[UPDATE],[DELETE]}
[NOT FOR REPLICATION]
AS
{sql_statements}
或者,最好的方法是更新:

This is for Old Records
update t2
set t2.ID2 = t1.ID2
 from table1 t1
join table2 t2 on t1.id= t2.id 


插入后可以使用触发器

This is for new Records

CREATE TRIGGER [schema_name.]trigger_name
ON table_name
AFTER  {[INSERT],[UPDATE],[DELETE]}
[NOT FOR REPLICATION]
AS
{sql_statements}
或者,最好的方法是更新:

This is for Old Records
update t2
set t2.ID2 = t1.ID2
 from table1 t1
join table2 t2 on t1.id= t2.id 


您可以在T1表上使用
IDENTITY
创建AutoID,即使它有
主键
现有数据

您可以使用ID为主键的
JOIN
更新T2表中的自动ID

请检查下面的查询以获得您的答案

CREATE TABLE T1(ID VARCHAR(50) PRIMARY KEY)

CREATE TABLE T2(T2ID INT IDENTITY, ID VARCHAR(50))

INSERT INTO T1(ID)
VALUES ('V1'),('V2'),('V3'),('V4'),('V5')

INSERT INTO T2(ID)
VALUES ('V1'),('V2'),('V3'),('V4'),('V5')

SELECT ID FROM T1
SELECT T2ID,ID FROM T2
Go

ALTER TABLE T1
ADD AutoID INT NOT NULL IDENTITY(1,1)
GO

ALTER TABLE T2
ADD AutoID INT
Go

SELECT ID,AutoID FROM T1
SELECT T2ID,ID, AutoID FROM T2
Go

UPDATE TT
SET TT.AutoID = T.AutoID
FROM T1 AS T
INNER JOIN T2 AS TT ON TT.ID = T.ID
GO

SELECT ID,AutoID FROM T1
SELECT T2ID,ID, AutoID FROM T2

DROP TABLE T1
GO
DROP TABLE T2
GO

您可以使用T1表上的
标识创建AutoID,即使它有
主键
现有数据

您可以使用ID为主键的
JOIN
更新T2表中的自动ID

请检查下面的查询以获得您的答案

CREATE TABLE T1(ID VARCHAR(50) PRIMARY KEY)

CREATE TABLE T2(T2ID INT IDENTITY, ID VARCHAR(50))

INSERT INTO T1(ID)
VALUES ('V1'),('V2'),('V3'),('V4'),('V5')

INSERT INTO T2(ID)
VALUES ('V1'),('V2'),('V3'),('V4'),('V5')

SELECT ID FROM T1
SELECT T2ID,ID FROM T2
Go

ALTER TABLE T1
ADD AutoID INT NOT NULL IDENTITY(1,1)
GO

ALTER TABLE T2
ADD AutoID INT
Go

SELECT ID,AutoID FROM T1
SELECT T2ID,ID, AutoID FROM T2
Go

UPDATE TT
SET TT.AutoID = T.AutoID
FROM T1 AS T
INNER JOIN T2 AS TT ON TT.ID = T.ID
GO

SELECT ID,AutoID FROM T1
SELECT T2ID,ID, AutoID FROM T2

DROP TABLE T1
GO
DROP TABLE T2
GO

Update语句未正确运行。这是一个正确的更新T2集合T2。[AutoId]=T1。[AutoId]来自T2,T1,其中T2.ManualId=T1.ManualIdUpdate语句未正确运行。这是一个正确的更新T2集合T2。[AutoId]=T1。[AutoId]来自T2,T1,其中T2.ManualId=T1.ManualIdhi触发器在SQL Server中是一个糟糕的解决方案,因为将14字节数据添加到SQL Server页面以作为触发器指针的最佳方法是将列作为标识(1,1)添加然后像second answerhi触发器那样编写批量更新语句在SQL Server中是一个糟糕的解决方案,因为将14字节的数据添加到SQL Server页面作为触发器指针的最佳方法是将列作为标识(1,1)添加,然后像second answer一样编写批量更新语句