sql自動增長標(biāo)識導(dǎo)致導(dǎo)入數(shù)據(jù)問題的解決方法
更新時間:2012年11月23日 18:26:35 作者:
對于一個設(shè)了自動增長標(biāo)識的數(shù)據(jù)表來說,它的字段的值是由數(shù)據(jù)庫自動設(shè)置的;這在導(dǎo)數(shù)據(jù)時很麻煩
對于一個設(shè)了自動增長標(biāo)識的數(shù)據(jù)表來說,它的字段的值是由數(shù)據(jù)庫自動設(shè)置的;這在導(dǎo)數(shù)據(jù)時很麻煩。
當(dāng)我們導(dǎo)數(shù)據(jù)時,我們往往想想將標(biāo)識字段的數(shù)據(jù)也導(dǎo)進來,怎么辦呢?
方法有兩種:
1.用數(shù)據(jù)庫管理工具在界面將表的自動增長標(biāo)識去除,導(dǎo)完數(shù)據(jù),再在界面里改回來。(這種方法麻煩,且要動數(shù)據(jù)表設(shè)置中,不推薦)
2.用SET IDENTITY_INSERT OFF和SET IDENTITY_INSERT ON(推薦這種方法)
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
database_name
指定的表所在的數(shù)據(jù)庫的名稱。
schema_name
表所屬架構(gòu)的名稱。
table
包含標(biāo)識列的表的名稱。
注釋
任何時候,一個會話中只有一個表的 IDENTITY_INSERT 屬性可以設(shè)置為 ON。如果某個表已將此屬性設(shè)置為 ON,則對另一個表發(fā)出 SET IDENTITY_INSERT ON 語句時,SQL Server 將返回一個錯誤信息,指出 SET IDENTITY_INSERT 已設(shè)置為 ON,并報告已將其屬性設(shè)置為 ON 的表。
如果插入值大于表的當(dāng)前標(biāo)識值,則 SQL Server 自動將新插入值作為當(dāng)前標(biāo)識值使用。
SET IDENTITY_INSERT 的設(shè)置是在執(zhí)行或運行時設(shè)置的,而不是在分析時設(shè)置的。
權(quán)限
用戶必須擁有表,或?qū)Ρ砭哂?ALTER 權(quán)限。
示例
下面的示例將創(chuàng)建一個包含標(biāo)識列的表,并說明如何使用 SET IDENTITY_INSERT 設(shè)置來填充由 DELETE 語句導(dǎo)致的標(biāo)識值中的空隙。
USE AdventureWorks2012;
GO
-- Create tool table.
CREATE TABLE dbo.Tool(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
)
GO
-- Inserting values into products table.
INSERT INTO dbo.Tool(Name) VALUES ('Screwdriver')
INSERT INTO dbo.Tool(Name) VALUES ('Hammer')
INSERT INTO dbo.Tool(Name) VALUES ('Saw')
INSERT INTO dbo.Tool(Name) VALUES ('Shovel')
GO
-- Create a gap in the identity values.
DELETE dbo.Tool
WHERE Name = 'Saw'
GO
SELECT *
FROM dbo.Tool
GO
-- Try to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT dbo.Tool ON
GO
-- Try to insert an explicit ID value of 3.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel')
GO
SELECT *
FROM dbo.Tool
GO
-- Drop products table.
DROP TABLE dbo.Tool
GO
當(dāng)我們導(dǎo)數(shù)據(jù)時,我們往往想想將標(biāo)識字段的數(shù)據(jù)也導(dǎo)進來,怎么辦呢?
方法有兩種:
1.用數(shù)據(jù)庫管理工具在界面將表的自動增長標(biāo)識去除,導(dǎo)完數(shù)據(jù),再在界面里改回來。(這種方法麻煩,且要動數(shù)據(jù)表設(shè)置中,不推薦)
2.用SET IDENTITY_INSERT OFF和SET IDENTITY_INSERT ON(推薦這種方法)
SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }
database_name
指定的表所在的數(shù)據(jù)庫的名稱。
schema_name
表所屬架構(gòu)的名稱。
table
包含標(biāo)識列的表的名稱。
注釋
任何時候,一個會話中只有一個表的 IDENTITY_INSERT 屬性可以設(shè)置為 ON。如果某個表已將此屬性設(shè)置為 ON,則對另一個表發(fā)出 SET IDENTITY_INSERT ON 語句時,SQL Server 將返回一個錯誤信息,指出 SET IDENTITY_INSERT 已設(shè)置為 ON,并報告已將其屬性設(shè)置為 ON 的表。
如果插入值大于表的當(dāng)前標(biāo)識值,則 SQL Server 自動將新插入值作為當(dāng)前標(biāo)識值使用。
SET IDENTITY_INSERT 的設(shè)置是在執(zhí)行或運行時設(shè)置的,而不是在分析時設(shè)置的。
權(quán)限
用戶必須擁有表,或?qū)Ρ砭哂?ALTER 權(quán)限。
示例
下面的示例將創(chuàng)建一個包含標(biāo)識列的表,并說明如何使用 SET IDENTITY_INSERT 設(shè)置來填充由 DELETE 語句導(dǎo)致的標(biāo)識值中的空隙。
復(fù)制代碼 代碼如下:
USE AdventureWorks2012;
GO
-- Create tool table.
CREATE TABLE dbo.Tool(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
)
GO
-- Inserting values into products table.
INSERT INTO dbo.Tool(Name) VALUES ('Screwdriver')
INSERT INTO dbo.Tool(Name) VALUES ('Hammer')
INSERT INTO dbo.Tool(Name) VALUES ('Saw')
INSERT INTO dbo.Tool(Name) VALUES ('Shovel')
GO
-- Create a gap in the identity values.
DELETE dbo.Tool
WHERE Name = 'Saw'
GO
SELECT *
FROM dbo.Tool
GO
-- Try to insert an explicit ID value of 3;
-- should return a warning.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel')
GO
-- SET IDENTITY_INSERT to ON.
SET IDENTITY_INSERT dbo.Tool ON
GO
-- Try to insert an explicit ID value of 3.
INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel')
GO
SELECT *
FROM dbo.Tool
GO
-- Drop products table.
DROP TABLE dbo.Tool
GO
相關(guān)文章
SQL Server2012數(shù)據(jù)庫備份和還原的教程
這篇文章主要為大家詳細(xì)介紹了SQL Server2012數(shù)據(jù)庫備份和還原的教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03SQL Server 2005數(shù)據(jù)庫還原錯誤的經(jīng)典解決方案
本文主要介紹了一個SQL Server 2005數(shù)據(jù)庫還原過程中的錯誤的解決方案,需要的朋友可以參考下2015-08-08Linux安裝ODBC連接SQLServer數(shù)據(jù)庫的步驟
這篇文章主要介紹了Linux安裝ODBC連接SQLServer數(shù)據(jù)庫?,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04拯救你的數(shù)據(jù) 通過日志恢復(fù)MSSQL數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了如何通過日志恢復(fù)MSSQL數(shù)據(jù)的具體步驟,感興趣的小伙伴們可以參考一下2016-05-05