Tôi đang tạo một tập lệnh để tự động di chuyển các thay đổi từ nhiều cơ sở dữ liệu phát triển sang dàn dựng / sản xuất. Về cơ bản, cần một loạt các kịch bản thay đổi và kết hợp chúng thành một tập lệnh duy nhất, gói mỗi tập lệnh trong một IF whatever BEGIN ... END
câu lệnh.
Tuy nhiên, một số tập lệnh yêu cầu một GO
câu lệnh để, chẳng hạn, trình phân tích cú pháp SQL biết về một cột mới sau khi nó được tạo.
ALTER TABLE dbo.EMPLOYEE
ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO -- Necessary, or next line will generate "Unknown column: EMP_IS_ADMIN"
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
Tuy nhiên, khi tôi bọc nó trong một IF
khối:
IF whatever
BEGIN
ALTER TABLE dbo.EMPLOYEE ADD COLUMN EMP_IS_ADMIN BIT NOT NULL
GO
UPDATE dbo.EMPLOYEE SET EMP_IS_ADMIN = whatever
END
Nó không thành công vì tôi đang gửi một BEGIN
mà không có kết quả phù hợp END
. Tuy nhiên, nếu tôi xóa GO
nó, nó lại phàn nàn về một cột không xác định.
Có cách nào để tạo và cập nhật cùng một cột trong một IF
khối duy nhất không?
GO
bản thân nó phải ở trên một dòng, vì vậy bạn chỉ có thể tìm kiếm trường hợp đó, và không phải mọi trường hợp của từ GO
. 2) Bạn luôn có thể ghi lại những câu lệnh nào đã được hoàn thành thành công. Hoặc bạn có thể kết thúc toàn bộ vấn đề trong một thử / bắt và sử dụng số dòng của riêng bạn bằng cách sử dụng một số biến, như @lineNo, mà bạn theo dõi và báo cáo lỗi. Vì bạn đang tạo các tệp này tự động, nên việc thực hiện các thay đổi như thế này sẽ rất dễ dàng. Có vẻ như bạn hoàn toàn không muốn khám phá tuyến đường này khi tôi nghĩ rằng có những giải pháp được tìm thấy cho tất cả các mối quan tâm của bạn.