2012-02-07 52 views
10

Tôi cố gắng để thả một thủ tục lưu trữ nếu nó tồn tại và sau đó tạo ra nó bằng cách thực hiện theo cách này:Tại sao câu lệnh CREATE PROCEDURE lại thất bại khi tôi sử dụng nó với IF Statement ở đây?

IF OBJECT_ID('[dbo].[myStoredProc]') IS not NULL 
    DROP PROCEDURE dbo.myStoredProc 


CREATE PROCEDURE [dbo].[myStoredProc] 
(
    @parameter1 BIT 
) AS 

IF @parameter1 = 1 
    BEGIN 
      .... 

Nhưng nó than phiền rằng:

"CREATE PROCEDURE phải báo cáo kết quả chỉ trong batch "

Câu hỏi: Làm cách nào để khắc phục tập lệnh của mình để khắc phục vấn đề này?

Trả lời

17

Bạn cần đặt go vào cuối lô lôgic đầu tiên của mình.

IF OBJECT_ID('[dbo].[myStoredProc]') IS not NULL 
    DROP PROCEDURE dbo.myStoredProc 
go -- you need to add the batch-terminator 'go' 


CREATE PROCEDURE [dbo].[myStoredProc] 
(
    @parameter1 BIT 
) AS 

IF @parameter1 = 1 
    BEGIN 
      .. 
+0

Đã hoạt động! Nhưng tại sao nó là cần thiết để chấm dứt? Tôi có nghĩa là logic đằng sau – pencilCake

+0

@pencilCake Bởi vì câu lệnh 'CREATE PROCEDURE' phải là câu lệnh đầu tiên (và chỉ một câu lệnh) trong một loạt. –

+0

Tôi tự hỏi tại sao MS tạo ra RULE này ... Chống lại cái gì? .. – pencilCake

8

Thêm GO sau khi tuyên bố IF của bạn cho thấy rằng đây là kết thúc của hàng loạt truy vấn đầu tiên của bạn.

đọc thêm ở đây:

http://msdn.microsoft.com/en-us/library/ms188037.aspx

IF OBJECT_ID('[dbo].[myStoredProc]') IS not NULL 
    DROP PROCEDURE dbo.myStoredProc 
GO 

này sẽ ngăn chặn lỗi của bạn xảy ra.

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