Ash*_*ine 30 sql-server diagram
我使用SQL Server 2008中的方便的数据库图表工具来创建和管理关系.我已将sourceDB导出到destinationDB,但图表没有出现.
我正在四处寻找如何将我在一个数据库中的图表导出到另一个数据库...这个在线知识库文章 失败,因为select * from dtproperties不再存在.
Jus*_*tin 45
@Ash我遇到了同样的问题.以下是我们为解决这个问题所做的工作......
System Diagrams似乎存储在"sysdiagrams"表中.因此,您需要做的第一件事是确定要复制的Diagram的diagram_id.运行以下查询以列出所有查询.**请注意,您需要将"SourceDB"替换为数据库的名称.
-- List all database diagrams
SELECT * FROM [SourceDB].[dbo].sysdiagrams
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用INSERT将图表从一个数据库复制到另一个数据库,如下所示.**注意再次将"SourceDB"替换为包含现有图表的Database的名称,将"DestinationDB"替换为您要复制到的数据库的名称.另外@SourceDiagramId应该设置为上面检索的id.
-- Insert a particular database diagram
DECLARE @SourceDiagramId int = 1
INSERT INTO [DestinationDB].[dbo].sysdiagrams
SELECT [name],diagram_id , version,definition from [SourceDB].[dbo].sysdiagrams
WHERE diagram_id = @SourceDiagramId
Run Code Online (Sandbox Code Playgroud)
然后你需要手动将"principal_id"设置为1.
-- Update the principal id (no idea why, but it set the owner as some asp_net user
UPDATE [DestinationDB].[dbo].sysdiagrams
SET principal_id = 1
Run Code Online (Sandbox Code Playgroud)
这对我们有用,看起来非常hacky,特别是因为Diagram完全存储在单个二进制字段"定义"中.
答案来自:http:
//www.dotnetspider.com/resources/21180-Copy-or-move-database-digram-from-for.aspx
Edu*_*omo 11
这会生成一个导入字符串:
SELECT
'DECLARE @def AS VARBINARY(MAX) ; ' +
'SELECT @def = CONVERT(VARBINARY(MAX), 0x' + CONVERT(NVARCHAR(MAX), [definition], 2) + ', 2) ;' +
' EXEC dbo.sp_creatediagram' +
' @diagramname=''' + [name] + ''',' +
' @version=' + CAST([version] AS NVARCHAR(MAX)) + ',' +
' @definition=@def'
AS ExportQuery
FROM
[dbo].[sysdiagrams]
WHERE
[name] = '' -- Diagram Name
Run Code Online (Sandbox Code Playgroud)
接下来,在其他DB中运行生成的字符串.
-- =============================================
-- Author: Eduardo Cuomo
-- Description: Export Database Diagrama to SQL Query
-- =============================================
CREATE PROCEDURE [dbo].[Sys_ExportDatabaseDiagram]
@name SYSNAME -- Diagram Name
AS
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT
'DECLARE @def AS VARBINARY(MAX) ; ' +
'SELECT @def = CONVERT(VARBINARY(MAX), 0x' + CONVERT(NVARCHAR(MAX), [definition], 2) + ', 2) ; ' +
' EXEC dbo.sp_creatediagram' +
' @diagramname=''''' + [name] + ''''',' +
' @version=' + CAST([version] AS NVARCHAR(MAX)) + ',' +
' @definition=@def'
AS ExportQuery
FROM
[dbo].[sysdiagrams]
WHERE
[name] = @name
Run Code Online (Sandbox Code Playgroud)
小智 7
你可以UPDATE通过修改你的INSERT陈述 - 特别是选择部分来摆脱陈述.您正在将diagram_id列插入principal_id列中(diagram_id是标识).
将其更改为:
DECLARE @SourceDiagramId int = 1
INSERT INTO [DestinationDB].[dbo].sysdiagrams
SELECT [name],principal_id,version,definition from [SourceDB].[dbo].sysdiagrams
WHERE diagram_id = @SourceDiagramId
Run Code Online (Sandbox Code Playgroud)
而且,首先,它就在那里.
与C Isaze的答案一样,有三个简单的步骤:
1-在要复制图表的目标服务器中创建相同数量的"虚拟"图表
2-在源服务器中将目标服务器添加为链接服务器

3-在源服务器上运行此脚本
update [LINKEDSERVER].TARGETDB.[dbo].sysdiagrams set [definition]=
(SELECT [definition] from SOURCEDB.[dbo].sysdiagrams WHERE diagram_id = 1)
where diagram_id=1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30454 次 |
| 最近记录: |