2013-07-01 57 views
7

Tôi đã lưu các thủ tục với cùng các tham số (tên máy chủ và ngày). Tôi muốn viết một thủ tục lưu sẵn và Exec chúng trong SP đó (gọi là SP_All).Làm thế nào để gọi Thủ tục lưu trữ (với 2 tham số) trong một thủ tục lưu trữ?

CREATE PROCEDURE [dbo].[SP_All] 
AS 
BEGIN 
exec sp_1 @myDate datetime, @ServerName sysname 
exec sp_2 @myDate datetime, @ServerName sysname 
exec sp_3 @myDate datetime, @ServerName sysname 
exec sp_4 @myDate datetime, @ServerName sysname 
END 
Go 

lỗi: Phải khai báo biến vô hướng "@myDate".

+1

thông số đặt/@ mydate datetime,/@ ServerName sysname – chetan

+4

Lưu ý phụ: bạn không nên ** sử dụng tiền tố 'sp_' cho các thủ tục đã lưu của bạn. Microsoft đã [dành riêng tiền tố đó cho việc sử dụng riêng của nó (xem * Đặt tên cho các thủ tục lưu trữ *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx), và bạn có nguy cơ bị đụng độ đôi khi trong tương lai. [Nó cũng không tốt cho hiệu suất thủ tục lưu trữ của bạn] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Tốt nhất là chỉ cần tránh 'sp_' và sử dụng cái gì đó khác làm tiền tố - hoặc không có tiền tố nào cả! –

+1

Mặc dù câu hỏi của bạn là câu hỏi cơ bản, +1 để thêm ví dụ mã hoàn chỉnh, thông báo lỗi hoàn chỉnh và giải thích về mã nên làm gì. Quá nhiều câu hỏi thiếu ít nhất một trong số này ... – Heinzi

Trả lời

6

tôi thấy hai vấn đề ở đây:

  1. thủ tục của bạn dường như có hai tham số, @myDate@ServerName, mà bạn chưa được khai báo. Làm như vậy bằng cách thêm tên và loại giữa tên thủ tục và AS.
  2. Khi gọi sp_1 đến sp_4, không cần phải chỉ định kiểu dữ liệu của các tham số một lần nữa (đã được quản lý bởi khai báo, xem điểm 1).

    CREATE PROCEDURE [dbo].[SP_All] 
        @myDate datetime, 
        @ServerName sysname 
    AS 
    BEGIN 
        exec sp_1 @myDate, @ServerName 
        exec sp_2 @myDate, @ServerName 
        exec sp_3 @myDate, @ServerName 
        exec sp_4 @myDate, @ServerName 
    END 
    
+0

Kính gửi Heinzi, marc_s và Devart cảm ơn cho ý kiến. Nó hoạt dộng bây giờ! Tôi biết đó là một câu hỏi cơ bản. Hy vọng tôi sẽ là một chuyên gia như tất cả các bạn. Cảm ơn rất nhiều lần nữa. – Raha

3

Hãy thử điều này một -

CREATE PROCEDURE [dbo].[SP_All] 

     @myDate DATETIME 
    , @ServerName SYSNAME 

AS BEGIN 

    EXEC dbo.sp_1 @myDate, @ServerName 
    EXEC dbo.sp_2 @myDate, @ServerName 
    EXEC dbo.sp_3 @myDate, @ServerName 
    EXEC dbo.sp_4 @myDate, @ServerName 

END 
1

bạn đang thực hiện thủ tục lưu trữ một cách sai lầm

exec sp_1 @myDate datetime, @ServerName sysname 

là hoàn toàn cú pháp sai.

Khi bạn phải thực hiện một thủ tục lưu trữ với các thông số, lần đầu tiên tuyên bố tham số và vượt qua nó ..

declare @myDate datetime 
declare @ServerName sysname 

exec sp_1 @myDate, @ServerName 

Đây là cách tiếp cận đúng ..

+0

Đây là một sự hiểu lầm. Tôi đã tuyên bố tất cả các tham số trong SP khác và bây giờ tôi chỉ cần thực hiện chúng. Câu trả lời của Heinzi nd Devart là chính xác và hiệu quả. – Raha

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