2013-04-04 46 views
28

Làm cách nào tôi có thể thực hiện một thủ tục lưu sẵn trong một thủ tục lưu sẵn khác trong máy chủ SQL? Làm cách nào để chuyển các tham số của quy trình thứ hai.?Thực hiện một thủ tục lưu sẵn trong một thủ tục lưu sẵn khác trong máy chủ SQL

+0

Bạn có dự định thực hiện việc này trong C# hoặc dưới dạng StoredProc trên chính Máy chủ không? – MethodMan

+0

sử dụng từ khóa 'exec'. – Matthew

+0

Tôi cần phải thực thi trong Máy chủ chính nó – Roys

Trả lời

0

Bạn có thể gọi hàm do người dùng định nghĩa trong một thủ tục lưu trữ luân phiên

điều này có thể giải quyết vấn đề của bạn để gọi thủ tục lưu trữ

2

Có, bạn có thể làm điều đó như thế này:

BEGIN 
    DECLARE @Results TABLE (Tid INT PRIMARY KEY); 

    INSERT @Results 

    EXEC Procedure2 [parameters]; 
    SET @total 1; 

END 
SELECT @total 
36

Nếu bạn chỉ muốn thực hiện một số hoạt động cụ thể bởi SP thứ hai của bạn và không yêu cầu giá trị từ SP sau đó chỉ cần thực hiện:

Exec secondSPName @anyparams 

Khác, nếu bạn cần giá trị trả về bởi SP thứ hai của bạn bên trong đầu tiên, sau đó tạo một biến bảng tạm thời với số cột bằng nhau và cùng định nghĩa cột trả về bởi SP thứ hai. Sau đó, bạn có thể nhận được những giá trị trong SP đầu tiên như:

Insert into @tep_table 
Exec secondSPName @anyparams 

Cập nhật:

Để vượt qua tham số để sp thứ hai, làm như sau:

Declare @id ID_Column_datatype 
Set @id=(Select id from table_1 Where yourconditions) 

Exec secondSPName @id 

Cập nhật 2:

Giả sử lần trả về thứ hai của bạn là IdName trong đó loại idintname thuộc loại varchar(64).

bây giờ, nếu bạn muốn chọn những giá trị trong sp đầu tiên sau đó tạo ra một tạm thời table giá trị biến và chèn vào nó:

Declare @tep_table table 
(
    Id int, 
    Name varchar(64) 
) 
Insert into @tep_table 
Exec secondSP 

Select * From @tep_table 

này sẽ trả lại cho bạn những giá trị được trả về bởi SP thứ hai.

Hy vọng, điều này rõ ràng tất cả những nghi ngờ của bạn.

+0

tanx .. ya i cần các giá trị được trả về bởi sp thứ hai bên trong sp thứ nhất. bt các tham số mà tôi cần phải vượt qua là một đầu ra của thủ tục đầu tiên. là nó có thể.? Xin xem ví dụ này. SP1 Chọn id từ bảng_1. là nó có thể vượt qua id này như là tham số của thủ tục thứ hai.? – Roys

+0

Có điều này là posible nhưng trước tiên bạn cần phải lưu trữ id này vào một biến và sau đó vượt qua cùng với sp thứ hai. Xem câu trả lời được cập nhật. –

+0

Các bước trên làm việc.tanx. Làm thế nào tôi có thể nhận được giá trị đầu ra của Sp thứ hai từ lần đầu tiên ..? – Roys

4

Giả sử bạn có một thủ tục lưu trữ như

thủ tục lưu trữ đầu tiên này:

Create PROCEDURE LoginId 
    @UserName nvarchar(200), 
    @Password nvarchar(200) 
AS 
BEGIN 
    DECLARE @loginID int 

    SELECT @loginID = LoginId 
    FROM UserLogin 
    WHERE UserName = @UserName AND Password = @Password 

    return @loginID 
END 

Bây giờ bạn muốn gọi thủ tục này từ một thủ tục lưu trữ như như dưới đây

thủ tục lưu trữ Second

Create PROCEDURE Emprecord 
     @UserName nvarchar(200), 
     @Password nvarchar(200), 
     @Email nvarchar(200), 
     @IsAdmin bit, 
     @EmpName nvarchar(200), 
     @EmpLastName nvarchar(200), 
     @EmpAddress nvarchar(200), 
     @EmpContactNo nvarchar(150), 
     @EmpCompanyName nvarchar(200) 

    AS 
    BEGIN 
     INSERT INTO UserLogin VALUES(@UserName,@Password,@Email,@IsAdmin) 

     DECLARE @EmpLoginid int 

     **exec @EmpLoginid= LoginId @UserName,@Password** 

     INSERT INTO tblEmployee VALUES(@EmpName,@EmpLastName,@EmpAddress,@EmpContactNo,@EmpCompanyName,@EmpLoginid) 
    END 

Như bạn đã thấy ở trên, chúng tôi có thể cal l một thủ tục lưu trữ từ một

0

bạn sp_test: Return FullName

USE [MY_DB] 
GO 

IF (OBJECT_ID('[dbo].[sp_test]', 'P') IS NOT NULL) 
DROP PROCEDURE [dbo].sp_test; 
GO 

CREATE PROCEDURE [dbo].sp_test 
@name VARCHAR(20), 
@last_name VARCHAR(30), 
@full_name VARCHAR(50) OUTPUT 
AS 

SET @full_name = @name + @last_name; 

GO 

Trong sp_main bạn

... 
DECLARE @my_name VARCHAR(20); 
DECLARE @my_last_name VARCHAR(30); 
DECLARE @my_full_name VARCHAR(50); 
... 

EXEC sp_test @my_name, @my_last_name, @my_full_name OUTPUT; 
... 
0

Vâng, của nó dễ dàng để cách chúng ta gọi hàm bên trong cửa hàng thủ tục.

ví dụ: tạo người dùng định nghĩa hàm Age và sử dụng trong truy vấn chọn.

select dbo.GetRegAge(R.DateOfBirth, r.RegistrationDate) as Age,R.DateOfBirth,r.RegistrationDate from T_Registration R 
Các vấn đề liên quan