Явное значение для столбца идентификации? - PullRequest
2 голосов
/ 11 марта 2012

Я пытаюсь сделать резервную копию моих данных из моей первой таблицы 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   DocumentID=@DocumentID

Я пытался отключить IDENTITY_INSERT в DocumentManagement.tbDocuments, используя этот код

SET IDENTITY_INSERT DocumentManagement.tbDocuments ON 
        DELETE FROM DocumentManagement.tbDocumentsHistory
            OUTPUT DELETED.* INTO DocumentManagement.tbDocuments 
            FROM    DocumentManagement.tbDocumentsHistory
        WHERE   DocumentID=@DocumentID
        SET IDENTITY_INSERT DocumentManagement.tbDocuments OFF

и я все еще сталкиваюсь с той же ошибкой!

мои таблицы desc:

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]

) ВКЛ [ПЕРВИЧНЫЙ]

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]

Ответы [ 2 ]

3 голосов
/ 11 марта 2012

это решит проблему, но я пытался сделать ее лучше, используя 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   DocumentID=@DocumentID
2 голосов
/ 11 марта 2012

Вам нужно изменить свой оператор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...