如何将带有自增列的表复制到另一个SQL Server

4

我被要求将现有的表复制到另一台服务器,但在重新创建表后似乎无法直接插入。

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]中。
我这样做了,并尝试从先前的表中全部插入到新表中,但出现以下错误:
Msg 8101, Level 16, State 1, Line 4 在未指定列名且IDENTITY_INSERT为ON时,无法为表'CommDB.dbo.tblRadiologyData'中的标识列指定显式值。
我是在走错了路还是遗漏了什么?我认为这只是一个简单的工作,从旧表复制所有内容到新表!

使用 Navicat)))) - Elvin Mammadov
你只创建表还是也移动数据? - Mansoor
请查看以下链接:https://dev59.com/sXI-5IYBdhLWcg3wHUnP - Jande
只需要将所有内容从一个服务器复制到另一个服务器进行测试,这样除了存储在其中的数据库之外,其他所有内容都将保持不变。上面的代码只是原始表的创建表脚本。 - Simon
4个回答

4
您可以尝试以下方法:
SET IDENTITY_INSERT TableName ON

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

这里的TableName是什么?在那个点上,taregetTable不存在。它是什么? - ZedZip

3

如果您在 SQL Server Management Studio 中使用“任务”->“导出数据”完成此操作,途中将会有一个按钮 - 编辑映射,它会显示高级属性,并且您可以在其中找到启用标识插入复选框。


3

根据定义,身份字段不允许您将值插入该列,它会自己命名。正如错误消息所述,您可以打开IDENTITY_INSERT以允许此操作,然后在插入完成后将其关闭。

您需要的语法是这样的;

SET IDENTITY_INSERT TableName ON

不建议在生产服务器上使用,但如果您只是用于测试,则可以继续使用。

另一种选择是将此字段设置为INT类型,不必担心它会自动创建标识符。


0

SET IDENTITY_INSERT [MyDataBase].[dbo].[MyTable] ON
INSERT INTO [MyDataBase].[dbo].[MyTable] --[DestinyDataBase].[Schema(exemple: dbo)].[DestinyTable]
    (
    [Id], -- All your columns
    [Name]
    )
    SELECT * FROM [SourceDataBase].[dbo].[SourceTable] --[SourceDataBase].[Schema(exemple: dbo)].[SourceTable]
GO
SET IDENTITY_INSERT [MyDataBase].[dbo].[MyTable] OFF

您必须明确指定所有列


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接