Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Các thủ tục được lưu trữ / lược đồ DB trong kiểm soát nguồn

Chúng tôi chọn viết kịch bản cho mọi thứ và điều đó bao gồm tất cả các thủ tục được lưu trữ và các thay đổi lược đồ. Không cần công cụ wysiwyg và không cần chương trình 'đồng bộ hóa' ưa thích.

Thay đổi lược đồ rất dễ dàng, tất cả những gì bạn cần làm là tạo và duy trì một tệp duy nhất cho phiên bản đó, bao gồm tất cả các thay đổi về lược đồ và dữ liệu. Điều này trở thành tập lệnh chuyển đổi của bạn từ phiên bản x sang x + 1. Sau đó, bạn có thể chạy nó với một bản sao lưu sản xuất và tích hợp nó vào 'bản dựng hàng ngày' của bạn để xác minh rằng nó hoạt động mà không có lỗi. Lưu ý rằng điều quan trọng là không thay đổi hoặc xóa sql tải dữ liệu / lược đồ đã được viết sẵn vì bạn có thể phá vỡ bất kỳ sql nào được viết sau này.

-- change #1234
ALTER TABLE asdf ADD COLUMN MyNewID INT
GO

-- change #5678
ALTER TABLE asdf DROP COLUMN SomeOtherID
GO

Đối với các thủ tục được lưu trữ, chúng tôi chọn một tệp duy nhất cho mỗi lần và nó sử dụng biểu mẫu thả / tạo. Tất cả các thủ tục được lưu trữ được tạo lại khi triển khai. Nhược điểm là nếu một thay đổi được thực hiện bên ngoài kiểm soát nguồn, thì thay đổi đó sẽ bị mất. Đồng thời, điều đó đúng với bất kỳ mã nào, nhưng DBA'a của bạn cần lưu ý điều này. Điều này thực sự ngăn những người bên ngoài nhóm làm phiền với các thủ tục được lưu trữ của bạn, vì các thay đổi của họ bị mất trong bản nâng cấp.

Sử dụng Sql Server, cú pháp như sau:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_MyProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [usp_MyProc]
GO

CREATE PROCEDURE [usp_MyProc]
(
    @UserID INT
)
AS

SET NOCOUNT ON

-- stored procedure logic.

SET NOCOUNT OFF

GO  

Việc duy nhất cần làm là viết một chương trình tiện ích đối chiếu tất cả các tệp riêng lẻ và tạo một tệp mới với toàn bộ tập hợp các bản cập nhật (dưới dạng một tập lệnh duy nhất). Thực hiện việc này trước tiên bằng cách thêm các thay đổi giản đồ sau đó đệ quy cấu trúc thư mục và bao gồm tất cả các tệp thủ tục được lưu trữ.

Là một điểm thuận lợi cho việc viết kịch bản cho mọi thứ, bạn sẽ trở nên đọc và viết SQL tốt hơn nhiều. Bạn cũng có thể làm cho toàn bộ quá trình này phức tạp hơn, nhưng đây là định dạng cơ bản về cách kiểm soát nguồn tất cả sql mà không cần bất kỳ phần mềm đặc biệt nào.

phụ lục:Rick đúng rằng bạn sẽ mất quyền đối với các thủ tục được lưu trữ với DROP / CREATE, vì vậy bạn có thể cần viết một tập lệnh khác để kích hoạt lại các quyền cụ thể. Tập lệnh quyền này sẽ là tập lệnh cuối cùng được chạy. Trải nghiệm của chúng tôi cho thấy nhiều vấn đề hơn với các câu ALTER DROP / CREATE ngữ nghĩa. YMMV



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:hàng có trong một truy vấn, bị thiếu trong một truy vấn khác

  2. Điều gì đang chặn Chọn top 1 * từ TableName với (nolock) trả về kết quả?

  3. CHÈN SỐ LƯỢNG LỚN SQL Server từ Linux

  4. Số hàng tối đa mà một bảng SQL Server có thể lưu trữ là bao nhiêu?

  5. Có cần khôi phục lại nếu truy vấn được hoàn thành với lỗi không?