T / SQL - 半手动标识列插入

时间:2014-04-04 18:02:27

标签: sql sql-server tsql

初始查询

DECLARE @Table1 TABLE (ID int, Value varchar(50))
DECLARE @Table2 TABLE (Value varchar(50))
DECLARE @MaxID1 int
DECLARE @MaxID2 int = 52

INSERT INTO @Table1 (ID, Value)
Values (1,'One'),(2,'Two'),(3,'Three'),(4,'Four'),(5,'Five')

INSERT INTO @Table2 (Value)
Values ('Six'),('Seven'),('Eight'),('Nine'),('Ten')

SELECT * FROM @Table1
SELECT * FROM @Table2
SELECT @MaxID1 = MAX(ID) FROM @Table1
SELECT @MaxID1 Scenario1, @MaxID2 Scenario2

从@ Table2插入值(值字段)后@ Table1的预期结果

// (使用@ MaxID1的情景#1)

ID  Value
1   One
2   Two
3   Three
4   Four
5   Five
6   Six
7   Seven
8   Eight
9   Nine
10  Ten

// (使用@ MaxID2的情景#2)

ID  Value
1   One
2   Two
3   Three
4   Four
5   Five
52  Six
53  Seven
54  Eight
55  Nine
56  Ten

如何从另一个表(@ Table2)对该表(@ Table1)执行INSERT查询时,如何半身份手动将ID值插入Identity列(ID)?在第一个场景中,我希望从@ Table1获取Max(ID)并向其添加1并继续添加记录。在第二种情况下,我希望采用预定义的#然后开始添加记录,其中第一个新记录的ID将是预定义值,所有后续新记录将是Max(ID)+ 1.

谢谢

UPDATED @Table 1没有身份约束。

1 个答案:

答案 0 :(得分:1)

如果要将任意int值插入标识列,请使用IDENTITY_INSERT:

SET IDENTITY_INSERT [table_name] ON;

给定会话一次只能有一个表可以启用此属性。确保在完成后将其关闭:

SET IDENTITY_INSERT [table_name] OFF;