2010-04-20 28 views
6

Tôi đang tìm cách thay đổi thủ tục đã lưu nếu có điều kiện. Tôi muốn để lại các thủ tục được lưu trữ như là nếu điều kiện không được đáp ứng, do đó, thả/tạo không thực sự là một lựa chọn.Thay đổi thủ tục lưu sẵn nếu điều kiện được đáp ứng

Cố gắng đặt nội dung của ALTER PROC bên trong khối IF đang ném lỗi cho tôi. Có suy nghĩ gì không?

+1

Tại sao bạn đang cố gắng thay đổi thủ tục được lưu trữ theo chương trình? Có cách nào bạn có thể làm cho các thủ tục lưu trữ dữ liệu điều khiển bằng cách nào đó và thay đổi dữ liệu mà ổ đĩa proc lưu trữ để thay thế? –

+0

Một bản cập nhật cần phải được thực hiện cho sproc để thêm chức năng bổ sung. SQL DB được sử dụng đã được sử dụng hợp nhất nhân rộng. Bởi vì sproc là một bài viết được sao chép thả/tạo không phải là một lựa chọn. ALTER được cho phép và các thay đổi sẽ lặp lại. – Matt

Trả lời

6
IF (condition) 
    EXEC ('ALTER PROC ...') 

ALTER/CREATE PROC phải là người đầu tiên trong nhóm vì vậy đây là cách duy nhất. Trừ khi bạn làm điều này

IF NOT (condition) 
    RAISERROR('abort connection with high severity', 20, 1) 
GO 
ALTER PROC ... 

GO 
4

Bạn có thể sử dụng cài đặt NOEXEC để thực hiện, nhưng hãy cẩn thận. Khi bạn bật NOEXEC ON, bạn phải chuyển nó về OFF ở cuối tập lệnh của bạn.

IF (CONDITION) 
    SET NOEXEC OFF --Enables execution of code (Default) 
ELSE 
    SET NOEXEC ON --Disables execution of code 
GO 
ALTER PROCEDURE MYPROC 
AS 
--STATEMENTS 
GO --END OF ALTER BLOCK 
SET NOEXEC OFF --RESTORES NOEXEC SETTING TO ITS DEFAULT 
Các vấn đề liên quan