2010-07-22 51 views
14

Có cách nào để sao chép Sơ đồ cơ sở dữ liệu SQL Server sang máy chủ khác không?SQL Server 2005, cách sao chép Sơ đồ cơ sở dữ liệu sang máy chủ khác

tôi thấy this và sửa đổi nó trông dể thương để sao chép chỉ có một sơ đồ:

INSERT INTO dbB.dbo.sysdiagrams 
SELECT [name],[principal_id],[version],[definition] 
FROM dbA.dbo.sysdiagrams 
Where name = 'MyDiagramName' 

Nhưng tôi cần phải sao chép nó vào một Server (Phát triển để sản xuất).

Tôi không muốn tạo máy chủ được liên kết để thực hiện việc này. (Cập nhật giải thích) Lý do đằng sau đó là tôi muốn đưa biểu đồ vào tập lệnh nâng cấp. Tôi đã thay đổi cơ sở dữ liệu để hỗ trợ một phiên bản mới (bảng mới, vv) và tôi muốn sơ đồ là một phần của kịch bản nâng cấp. vì vậy nó là tốt nhất nếu tôi có thể đặt nó trong một kịch bản SQL. Nếu có một tệp được phân tách để nhập theo cách thủ công sau đó, nó có thể thực hiện công việc, nhưng nó không phải là tốt nhất.

Vì vậy, tôi cần phải 'lưu' định nghĩa biểu đồ vào tệp bằng cách nào đó để khôi phục tệp đó trên máy chủ khác.

Trả lời

5

Chỉ cần tìm thấy this solution.

Trong bài viết này, có mã để tạo thủ tục lưu trữ tạo ra một kịch bản SQL Server để tạo lại sơ đồ. Vì vậy, bạn chỉ cần lưu đầu ra của thủ tục lưu trữ trong một tệp .SQL và chạy nó trên máy chủ khác.

Vấn đề là chuyển đổi Varbinary To a String (Varchar) thành Hex để có thể sử dụng nó trong truy vấn chèn/cập nhật. Nhưng nó cũng được giải thích trong liên kết ...

-1
+0

này sử dụng một 'bảng tạm thời'. không hoạt động cho kịch bản Máy chủ khác. – DavRob60

+0

Bạn đã từng sử dụng một máy chủ liên kết chưa? – greektreat

+0

Có, nhưng tôi muốn làm điều đó mà không có, đó là một phần của câu hỏi. – DavRob60

2

Đầu tiên: Tạo một Máy chủ Liên kết Từ Source Server bên trong Destination Server.

Đối tạo Link Server sử dụng this Link

Thứ hai: Sử dụng này

USE DestinationDatabase 

DELETE sysDiagrams 
WHERE name IN (SELECT name 
       FROM  <LinkServerName>.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 <LinkServerName>.SourceDatabase.dbo.sysDiagrams 

SET IDENTITY_INSERT sysDiagrams OFF 
+0

Tôi đã chỉ định trong câu hỏi Tôi không muốn sử dụng máy chủ liên kết vì biểu đồ cần được bao gồm trong tập lệnh nâng cấp. Dù sao cũng cảm ơn bạn. – DavRob60

+0

sử dụng Open DataSource đối với Máy chủ Liên kết. –

+1

Bạn không nhận được nó. Điều gì xảy ra nếu máy chủ đích không "nhìn thấy" máy chủ nguồn? – DavRob60

Các vấn đề liên quan