sql自動(dòng)增長標(biāo)識導(dǎo)致導(dǎo)入數(shù)據(jù)問題的解決方法
發(fā)布日期:2022-01-09 19:17 | 文章來源:站長之家
當(dāng)我們導(dǎo)數(shù)據(jù)時(shí),我們往往想想將標(biāo)識字段的數(shù)據(jù)也導(dǎo)進(jìn)來,怎么辦呢?
方法有兩種:
1.用數(shù)據(jù)庫管理工具在界面將表的自動(dòng)增長標(biāo)識去除,導(dǎo)完數(shù)據(jù),再在界面里改回來。(這種方法麻煩,且要?jiǎng)訑?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)識列的表的名稱。 注釋
任何時(shí)候,一個(gè)會(huì)話中只有一個(gè)表的 IDENTITY_INSERT 屬性可以設(shè)置為 ON。如果某個(gè)表已將此屬性設(shè)置為 ON,則對另一個(gè)表發(fā)出 SET IDENTITY_INSERT ON 語句時(shí),SQL Server 將返回一個(gè)錯(cuò)誤信息,指出 SET IDENTITY_INSERT 已設(shè)置為 ON,并報(bào)告已將其屬性設(shè)置為 ON 的表。 如果插入值大于表的當(dāng)前標(biāo)識值,則 SQL Server 自動(dòng)將新插入值作為當(dāng)前標(biāo)識值使用。
SET IDENTITY_INSERT 的設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置的,而不是在分析時(shí)設(shè)置的。 權(quán)限
用戶必須擁有表,或?qū)Ρ砭哂?ALTER 權(quán)限。 示例
下面的示例將創(chuàng)建一個(gè)包含標(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
database_name
指定的表所在的數(shù)據(jù)庫的名稱。 schema_name
表所屬架構(gòu)的名稱。 table
包含標(biāo)識列的表的名稱。 注釋
任何時(shí)候,一個(gè)會(huì)話中只有一個(gè)表的 IDENTITY_INSERT 屬性可以設(shè)置為 ON。如果某個(gè)表已將此屬性設(shè)置為 ON,則對另一個(gè)表發(fā)出 SET IDENTITY_INSERT ON 語句時(shí),SQL Server 將返回一個(gè)錯(cuò)誤信息,指出 SET IDENTITY_INSERT 已設(shè)置為 ON,并報(bào)告已將其屬性設(shè)置為 ON 的表。 如果插入值大于表的當(dāng)前標(biāo)識值,則 SQL Server 自動(dòng)將新插入值作為當(dāng)前標(biāo)識值使用。
SET IDENTITY_INSERT 的設(shè)置是在執(zhí)行或運(yùn)行時(shí)設(shè)置的,而不是在分析時(shí)設(shè)置的。 權(quán)限
用戶必須擁有表,或?qū)Ρ砭哂?ALTER 權(quán)限。 示例
下面的示例將創(chuàng)建一個(gè)包含標(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
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
相關(guān)文章