2012-03-11 31 views
2

我想使我的数据备份从我的第一台DocumentManagement.tbDocumentsHistory,并将其保存在DocumentManagement.tbDocuments标识列的显式值?

而且由于DocumentManagement.tbDocuments有ID IDENTITY_INSERT栏这个错误会引发

表'DocumentManagement.tbDocuments'中的标识列的显式值只能在使用列列表且IDENTITY_INSERT为ON时指定。

当我用这个代码

DELETE FROM DocumentManagement.tbDocumentsHistory 
OUTPUT DELETED.* INTO DocumentManagement.tbDocuments 
FROM DocumentManagement.tbDocumentsHistory 
WHERE [email protected] 

我试图关闭IDENTITY_INSERT上DocumentManagement.tbDocuments使用此代码

SET IDENTITY_INSERT DocumentManagement.tbDocuments ON 
     DELETE FROM DocumentManagement.tbDocumentsHistory 
      OUTPUT DELETED.* INTO DocumentManagement.tbDocuments 
      FROM DocumentManagement.tbDocumentsHistory 
     WHERE [email protected] 
     SET IDENTITY_INSERT DocumentManagement.tbDocuments OFF 

,我仍然面临着同样的错误!

我的表说明:

CREATE TABLE [DocumentManagement].[tbDocuments](
[DocumentID] [bigint] IDENTITY(1,1) NOT NULL, 
[DocumentNameEn] [nvarchar](max) NULL, 
[DocumentNameAr] [nvarchar](max) NULL, 
[DocumentDescriptionEn] [nvarchar](max) NULL, 
[DocumentDescriptionAr] [nvarchar](max) NULL, 
[CreatedOn] [datetime2](7) NULL, 
[ModifiedOn] [datetime2](7) NULL, 
[AddedBy] [bigint] NULL, 
[modifaiedBy] [bigint] NULL, 
[PhysicalName] [nvarchar](max) NULL, 
[Extension] [nvarchar](15) NULL, 
[DocumentTypeID] [bigint] NULL, 
[PhysicalPath] [nvarchar](max) NULL, 


CONSTRAINT [PK_tbDocuments] PRIMARY KEY CLUSTERED([DocumentID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 

)ON [PRIMARY]

CREATE TABLE [DocumentManagement].[tbDocumentsHistory](
[DocumentID] [bigint] NOT NULL, 
[DocumentNameEn] [nvarchar](max) NULL, 
[DocumentNameAr] [nvarchar](max) NULL, 
[DocumentDescriptionEn] [nvarchar](max) NULL, 
[DocumentDescriptionAr] [nvarchar](max) NULL, 
[CreatedOn] [datetime2](7) NULL, 
[ModifiedOn] [datetime2](7) NULL, 
[AddedBy] [bigint] NULL, 
[modifaiedBy] [bigint] NULL, 
[PhysicalName] [nvarchar](max) NULL, 
[Extension] [nvarchar](15) NULL, 
[DocumentTypeID] [bigint] NULL, 
[PhysicalPath] [nvarchar](max) NULL, CONSTRAINT [PK_tbDocumentsHistory] PRIMARY KEY CLUSTERED([DocumentID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY] 
+0

使文档名称的nvarchar(max)。真的吗? – 2012-03-11 08:52:30

+0

它只是一个测试数据! – HAJJAJ 2012-03-11 09:02:31

回答

3

这将解决这个问题,但我想它更好地使用OUTPUT

SET IDENTITY_INSERT DocumentManagement.tbDocuments ON 
     INSERT INTO DocumentManagement.tbDocuments 
       (DocumentID, DocumentNameEn , DocumentNameAr , DocumentDescriptionEn , 
        DocumentDescriptionAr , CreatedOn , ModifiedOn , 
        AddedBy , modifaiedBy , PhysicalName ,Extension , 
        DocumentTypeID ,PhysicalPath 
       ) 
     SELECT * FROM DocumentManagement.tbDocumentsHistory 
     SET IDENTITY_INSERT DocumentManagement.tbDocuments OFF 

     DELETE FROM DocumentManagement.tbDocumentsHistory   
     FROM DocumentManagement.tbDocumentsHistory 
     WHERE [email protected] 
2

您需要修改您的INSERT语句,并添加包含标识列的名称,这列列表工作。

使用标识插入任何INSERT语句需要一个列清单,就像这样:

CREATE TABLE dbo.Tab 
(
    ID INT IDENTITY NOT NULL PRIMARY KEY, 
    Name VARCHAR(40) NOT NULL 
) 

SET IDENTITY_INSERT dbo.Tab ON 
GO 

INSERT INTO dbo.Tab (ID, Name) VALUES (3000, 'Groucho') 
GO 

SET IDENTITY_INSERT dbo.Tab OFF 
+0

我完全不明白你的观点,请你澄清一下。 – HAJJAJ 2012-03-11 08:47:14

+0

不要使用*进行插入,明确指定列名称 – kaj 2012-03-11 08:55:52

+0

@KAJ:我认为你发布的链接状态ID确实如此。 – Mithrandir 2012-03-11 08:58:32

相关问题