如何从不同的服务器

时间:2017-11-30 08:41:40

标签: sql-server tsql database-diagram

背景: 我们的数据库最初由共享服务器上的第三方托管公司托管。我们没有创建数据库图表的权限,因此快速解决方案是在.\sqlexpress创建图表以方便。现在我们的数据库在我们自己的专用服务器上,因此我们有权创建图表(不是唯一的原因)。

现在我想从sqlexpress将图表迁移到新服务器,而无需重新创建它。因此,this question我找到了我需要的图表SELECT * FROM localdb.dbo.sysdiagrams,然后通过复制和粘贴所有值来执行INSERT INTO newdb.dbo.sysdiagrams VALUES (diagramValuesHere)。这似乎创建了图表,除非我去查看它我收到此消息;

  

docfile已损坏。 (MS Visual Database Tools)

Error Image

我唯一可以想到的是导致问题的是sql server版本不同。

  

SQLEXPRESS - Microsoft SQL Server 2012(SP3-GDR)(KB4019092) -      11.0.6251.0(X64)2017年7月7日07:14:24版权所有(c)Windows NT 6.3上的Microsoft Corporation Express Edition(64位)(Build      15063:)

。   

  

NEWSERVER - Microsoft SQL Server 2014(SP2-CU7)(KB4032541) -      12.0.5556.0(X64)2017年8月17日12:07:38版权所有(c)Windows NT 6.3上的Microsoft Corporation Web Edition(64位)(Build      9600:)

2 个答案:

答案 0 :(得分:1)

在新数据库中启用Diagrams:

在新数据库中,单击"数据库图"夹。 Sql Server Management Studio将提示您输入图表。如果您执行此步骤,则数据库中将包含sysdiagrams表。

然后执行以下操作:

IF EXISTS (SELECT name FROM sys.objects WHERE object_id = OBJECT_ID(N'sysdiagrams') AND type in (N'U',N'PC'))
    DROP TABLE sysdiagrams
GO


CREATE TABLE [dbo].[sysdiagrams](
    [name] [sysname] NOT NULL,
    [principal_id] [int] NOT NULL,
    [diagram_id] [int] IDENTITY(1,1) NOT NULL,
    [version] [int] NULL,
    [definition] [varbinary](max) NULL,
PRIMARY KEY CLUSTERED 
(
    [diagram_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [UK_principal_name] UNIQUE NONCLUSTERED 
(
    [principal_id] ASC,
    [name] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

EXEC sys.sp_addextendedproperty @name=N'microsoft_database_tools_support', @value=1 , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'sysdiagrams'
GO


SELECT name, principal_id,[version], [definition]
       FROM olddb.dbo.sysdiagrams -- OLD Server Database Diagram

INSERT INTO newdb.dbo.sysdiagrams 
     SELECT name, principal_id,[version], [definition]

答案 1 :(得分:0)

一方面,Microsoft只提供与一个版本的MSSQL和前一个版本的兼容性,因此图表在您的MSSQL实例之间可能不兼容。

另一方面,它们提供了将图表升级到下一版本的功能:https://technet.microsoft.com/en-us/library/ms190628(v=sql.110).aspx

  

升级旧数据库图表

     
      
  • 从对象资源管理器中,展开数据库。
  •   
  • 展开数据库下的Database Diagram节点。
  •   
  • 如果要设置数据库图表,请在出现提示时选择“是”。
  •   
  • 这将升级存储在数据库中的图表。
  •