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
Trả lời
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ữ
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
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à Id
và Name
trong đó loại id
là int
và name
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.
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
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. –
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
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
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;
...
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
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
sử dụng từ khóa 'exec'. – Matthew
Tôi cần phải thực thi trong Máy chủ chính nó – Roys