3

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

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

文档文件已损坏。(MS 可视化数据库工具)

错误图像

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

SQLEXPRESS - Microsoft SQL Server 2012 (SP3-GDR) (KB4019092) - 11.0.6251.0 (X64) Jul 7 2017 07:14:24 版权所有 (c) Microsoft Corporation Express Edition (64-bit) o​​n Windows NT 6.3 (Build 15063: )

. .

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

4

2 回答 2

1

在新数据库中启用图表:

在新数据库中,单击“Database 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]
于 2017-11-30T09:05:06.707 回答
0

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

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

升级旧数据库图表

  • 从对象资源管理器中,展开数据库。
  • 展开数据库下的 Database Diagram 节点。
  • 如果您要设置数据库图表,请在提示时选择是。
  • 这将升级存储在数据库中的图表。
于 2017-11-30T08:57:39.583 回答