2016-11-15 28 views
1

我被要求將現有的表複製到另一個服務器,但在重新創建表時似乎無法直接插入。如何將具有標識的一個表複製到另一個SQL Server

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[tblRadiologyData] 
(
    [RadiologyID] [int] IDENTITY(1,1) NOT NULL, 
    [ExaminationDate] [datetime] NOT NULL, 
    [ReferralDate] [datetime] NULL, 
    [ReportedDate] [datetime] NULL, 
    [AttendanceNumber] [varchar](10) NULL, 
    [LocalPatientIdentifier] [varchar](10) NOT NULL, 
    [NHSNumber] [varchar](10) NULL, 
    [Surname] [varchar](35) NULL, 
    [Forenames] [varchar](35) NULL, 
    [DateOfBirth] [datetime] NULL, 
    [AttendanceStatus] [varchar](20) NULL, 
    [AttendancePatientCategory] [varchar](10) NULL, 
    [AttendancePatientGroup] [varchar](20) NULL, 
    [AttendanceSpecialtyName] [varchar](50) NULL, 
    [AttendancePriority] [varchar](10) NULL, 
    [AttendanceSiteCode] [varchar](4) NULL, 
    [ExamExaminationCode] [varchar](10) NOT NULL, 
    [ExamRoomName] [varchar](50) NULL, 
    [ExamExaminationName] [varchar](30) NULL, 
    [ExamKornerCategory] [varchar](10) NULL, 
    [KornerBandName] [varchar](20) NULL, 
    [AttendanceSourceName] [varchar](30) NULL, 
    [RefDoctor] [varchar](30) NULL, 
    [DemogRegisteredGPCode] [varchar](8) NULL, 
    [RegPracCode] [varchar](10) NULL, 
    [Practice] [varchar](6) NULL, 
    [DOHCode] [varchar](8) NULL, 
    [PCOCode] [varchar](5) NULL, 
    [ExamDuration] [int] NULL, 
    [InternalNumber] [varchar](12) NULL, 
    [Postcode] [varchar](8) NULL, 
    [PCTRes] [varchar](5) NULL, 
    [DHA] [varchar](3) NULL, 
    [KornerBand] [varchar](2) NULL, 
    [OPUnbundled] [bit] NOT NULL, 
    [UB_HRG] [varchar](5) NULL, 
    [StatusCode] [varchar](2) NULL, 
    [LastModified] [datetime] NULL, 
    [SpecialtyCode] [varchar](3) NULL, 
    [deptcode] [varchar](255) NULL, 
    [HRGCode] [varchar](5) NULL, 
    [HRGGroup] [varchar](6) NULL, 
    [HRGTariff] [decimal](19, 4) NULL, 
    [Chargeable] [bit] NOT NULL, 
    [HEYActivity] [varchar](10) NULL, 
    [InternallyTraded] [varchar](3) NULL, 
    [PatientSex] [nchar](10) NULL, 
    [EthnicCategory] [nchar](10) NULL, 
    [AgeAtExamDate] [int] NULL, 
    [HRGCode1516] [varchar](5) NULL, 

    CONSTRAINT [PK_tblRadiologyData] 
     PRIMARY KEY NONCLUSTERED ([ExaminationDate] ASC, 
            [LocalPatientIdentifier] ASC, 
            [ExamExaminationCode] ASC) 
        WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
          IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
          ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 
GO 

SET ANSI_PADDING OFF 
GO 

ALTER TABLE [dbo].[tblRadiologyData] 
    ADD DEFAULT ((0)) FOR [OPUnbundled] 
GO 

ALTER TABLE [dbo].[tblRadiologyData] 
    ADD DEFAULT ((0)) FOR [Chargeable] 
GO 

以上是原代碼和我試圖做的是拷貝和不同的服務器/數據庫[CHH-BI] [CommDB]上重新創建。

我這樣做,並試圖插入所有到從以前的新表,但有錯誤

消息8101,級別16,狀態1,行4
標識列在一個明確的價值表「CommDB.dbo.tblRadiologyData」只能在使用列列表且IDENTITY_INSERT爲ON時指定。

我該怎麼辦?或者錯過了什麼?我認爲創建相同的表格並將所有內容從舊的複製到新的只是一項簡單的工作!

+0

使用navicat)))) –

+0

你只創建表還是移動數據也..? – Mansoor

+0

看看 http://stackoverflow.com/questions/2005437/an-explicit-value-for-the-identity-column-in-table-can-only-be-specified-when-a – Dejan

回答

2

標識字段根據定義不允許您向該列中插入值,它會自行命名。如錯誤消息所示,您可以打開IDENTITY_INSERT以允許此操作在插入完成後將其切換回。

您需要的語法是:

SET IDENTITY_INSERT TableName ON 

不建議在生產服務器上,但如果你只是在做這個測試然後堅持下去。

您的其他選擇是讓該字段爲INT,而不用擔心會自動爲您創建標識。

2

你可以試試這個:

SET IDENTITY_INSERT TableName ON 

SELECT * INTO targetTable 
FROM [sourceserver].[sourcedatabase].[dbo].[sourceTable] 
+0

這是什麼TableName?在這一點上,taregetTable不存在。它是什麼? – Oleg

0

如果你這樣做在SQL Server Management Studio中與任務 - >導出數據......還有沿途的按鈕 - 這顯示高級屬性,你可以找到Edit mappings其中有Enable identity insert複選框。

相關問題