適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
Microsoft Fabric 中的 SQL 資料庫
透過此陳述,你可以將明確的值插入資料表的欄位。IDENTITY
語法
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
引數
database_name
指定資料表所在的資料庫名稱。
schema_name
包含該資料表的結構名稱。
table_name
具有標識列的數據表名稱。
備註
在任何時間,工作階段中只有一個資料表可以將 IDENTITY_INSERT 屬性設定為 ON。 如果一個資料表已經將此屬性設為 ON,而你為另一個資料表發出SET IDENTITY_INSERT ON陳述,SQL Server 會回傳一個錯誤訊息,顯示SET IDENTITY_INSERT已經 ON,並回報該資料表所設定的。ON
- 當
increment函式的參數IDENTITY為正,且插入的值大於資料表目前的身份值時,SQL 資料庫引擎 會自動使用新插入的值作為當前身份值。 - 當
increment函式的參數IDENTITY為負,且插入的值小於資料表目前的身份值時,SQL Server 會自動使用新插入的值作為當前身份值。
SET IDENTITY_INSERT 的設定是在運行時間設定,而不是在剖析時間設定。
權限
你必須擁有該桌或擁有 ALTER 桌上許可。
範例
下列範例會建立含識別欄位的資料表,且會顯示如何利用 SET IDENTITY_INSERT 設定來填滿 DELETE 陳述式所造成的識別值的間距。
USE AdventureWorks2022;
GO
建立工具數據表。
CREATE TABLE dbo.Tool
(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR (40) NOT NULL
);
GO
將值插入 products 數據表。
INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
('Hammer'),
('Saw'),
('Shovel');
GO
在識別值中建立間距。
DELETE dbo.Tool
WHERE Name = 'Saw';
GO
SELECT *
FROM dbo.Tool;
GO
嘗試插入 3 的明確標識碼值。
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
前述 INSERT 程式碼回傳以下錯誤:
An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.
將 IDENTITY_INSERT 設定為 ON。
SET IDENTITY_INSERT dbo.Tool ON;
GO
嘗試插入 3 的明確標識碼值。
INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO
SELECT *
FROM dbo.Tool;
GO
卸除工具數據表。
DROP TABLE dbo.Tool;
GO