2013-04-16 36 views
5

Tôi có một dự án SSDT. Khi xuất bản một phiên bản mới, tôi muốn xuất bản/khởi tạo một số dữ liệu trong cơ sở dữ liệu. Điều đó có thể được thực hiện bằng SSDT không?Xuất bản dữ liệu bằng SSDT?

Trả lời

3

Nó có thể được thực hiện, nhưng có thể phức tạp. Nếu bạn thiết lập một biến trong dự án có thể được sử dụng cho các bản phát hành "Mới", bạn có thể đặt nó vào tập lệnh sau triển khai của bạn như một phần sẽ chạy một loạt các chèn, nhưng chỉ cho kiểu "Mới" đó.

Như David đã đề cập, cách tốt hơn có thể là sử dụng dữ liệu của Cổng Đỏ so sánh hoặc chạy tập lệnh sau khi tạo cơ sở dữ liệu. Có thể làm điều đó trong các kịch bản hậu triển khai, nhưng có thể chứng minh là khó khăn.

Something như thế này có thể làm việc:

IF '$(DeployType)' = 'New' 
BEGIN --"New" release scripts 
PRINT 'Post-Deploy Scripts for release.' 
:r .\InsertScript1.sql 
:r .\InsertScript2.sql 
--etc 
END --"New" release scripts 
+0

Nó có thể làm việc để đưa vào một số logic vào các kịch bản sau triển khai để kiểm tra sự tồn tại của các bản ghi trước khi cố gắng chạy DML? –

+0

Chúng tôi làm điều đó, nhưng kịch bản triển khai bài đăng này chỉ chạy các tập lệnh thực tế. Bên trong tập lệnh, chúng tôi kiểm tra xem liệu dữ liệu đã tồn tại chưa trước khi chèn nó. Đây sẽ chỉ là một cách để chỉ chạy các tập lệnh nhất định nếu bạn sử dụng một giá trị nhất định cho biến dự án của mình. Ngoài ra, khi chúng ta chuyển sang biến "Mới", nó được thiết lập để chạy với một hồ sơ xuất bản "Mới" luôn tạo lại cơ sở dữ liệu để chúng tôi không kiểm tra nhiều trong các trường hợp này. –

2

Điều này không thể thực hiện được trong SSDT. current guidance là sử dụng tập lệnh hậu triển khai.

Redgate ReadyRoll cung cấp nhiều trải nghiệm quen thuộc cho người dùng SSDT, nhưng đã cải thiện static data management cũng như nhiều cải tiến khác.

+0

Có vẻ như tập lệnh sau triển khai có nghĩa là IS có thể thực hiện được, đúng không? –

+0

Vâng, trong nhiều như bất cứ điều gì có thể trong mã! Những gì tôi có nghĩa là không có sự hỗ trợ đặc biệt cho dữ liệu tĩnh, do đó bạn phải chạy mã của riêng bạn trong kịch bản bài viết sâu như một cách giải quyết. –

1

Chúng tôi bao gồm Merge-scripts tự động, khi chúng được đặt trong một thư mục con cụ thể của dự án.

+0

Chúng tôi cũng sử dụng các tập lệnh hợp nhất và các tập lệnh được tạo tự động từ tập lệnh khác. Chúng được bao gồm một cách rõ ràng trong kịch bản triển khai bài tương tự như câu trả lời của Peter Schott nhưng không có kiểm tra 'mới'. –

0

tùy thuộc vào những gì bạn làm, bảng giá trị custructors có thể là một cái gì đó để có một cái nhìn tại địa chỉ:

SELECT * 
FROM 
    (VALUES 
    (101, 'Bikes'), 
    (102, 'Accessories'), 
    (103, 'Clothes') 
) AS Category(CategoryID, CategoryName); 

Đây là một cách dễ dàng vận chuyển và so sánh bằng SSDT.

Để biết thông tin về quặng, hãy xem https://www.simple-talk.com/sql/sql-training/table-value-constructors-in-sql-server-2008/

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