Create the diagram or diagrams in the "source" database.
Review the structure and contents of sysDiagrams. Note that column
diagram_id
is an identity column. 1 row gets stored for every diagram. (You don't care, but it used to be 4 or 5 rows in SQL 2000.)To copy to another database on the same SQL instance, the simplest way is to do INSERT... SELECT... between tables. With that identity column in the way, you'll have to fuss with SET IDENTITY_INSERT, and perhaps assign a new identity value on the target computer. Irritating, but not critically hard.
The following script will copy all diagrams from one database to another that's on the same server (this is how I archive complex diagrams that took waaaay too long to create, from databases that are prone to get dropped and recreated):
USE TargetDatabase
DELETE sysDiagrams
where name in (select name from SourceDatabase.dbo.sysDiagrams)
SET identity_insert sysDiagrams on
INSERT sysDiagrams (name, principal_id, diagram_id, version, definition)
select name, principal_id, diagram_id, version, definition
from SourceDatabase.dbo.sysDiagrams
SET identity_insert sysDiagrams off
To copy to another database on a different SQL instance (or server),
well, it gets even harder. I use temporarily created Linked Server
definitions, using scripts I sweated bullets over years ago and never
want to have to modify again (i.e. post a different question so someone
who knows can tell you how they work), and modify the scripts with
appropriate four-part naming conventions. Other options (OPENROWSET and
the like) are possible, but I'm even less familiar with those.
No comments:
Post a Comment