2012-04-20 24 views
5

tôi các thủ tục lưu trữ sau đây:IF/ELSE tùy thuộc vào kết quả của thủ tục lưu trữ

ALTER PROCEDURE [dbo].[CheckAdminExists] 
    @SID NVARCHAR(50), 
    @AdminName NVARCHAR(MAX) 
AS 
    SELECT 
     Administrator.ID 
    FROM 
     Administrator 
    WHERE 
     Administrator.SID = @SID 
     AND Administrator.Name = @AdminName 
GO 

Bây giờ tôi muốn tạo SP khác với một mã như thế:

IF NOT NULL (EXECUTE CheckAdminExists 'S-1','Admin') 
--do something 
ELSE 
--do something else 

gì là cú pháp đúng để thực hiện nó?

+1

điều gì sai khi thực hiện nội tuyến? như: 'IF EXISTS (SELECT 1 FROM Administrator WHERE Administrator.SID = @SID AND Administrator.Name = @AdminName) BEGIN IN 'nó tồn tại' END ELSE BEGIN IN 'nó KHÔNG tồn tại' END' đó là một truy vấn tầm thường, chỉ cần bao gồm nó ở nơi bạn cần. –

Trả lời

11

Bạn không nên sử dụng quy trình được lưu trữ cho mục đích này và sử dụng chức năng thay thế để kiểm tra xem Quản trị viên có tồn tại hay không.

Sau đó, trong thủ tục mới được lưu trữ của bạn gọi CheckAdminExists chức năng:

CREATE FUNCTION [dbo].[CheckAdminExists] (@SID NVARCHAR(50), @AdminName NVARCHAR(MAX)) 
RETURNS BIT 
AS 
BEGIN 
DECLARE @RetVal INT 

SELECT @RetVal = COUNT(Administrator.ID) 
FROM 
    Administrator 
WHERE 
    Administrator.SID = @SID 
    AND Administrator.Name = @AdminName 

IF @RetVal > 0 
BEGIN 
    RETURN 1 
END 
    RETURN 0 
END 

Then in your stored procedure call the function: 

DECLARE @AdminExists BIT 
SELECT @AdminExists = [dbo].[CheckAdminExists] 

IF @AdminExists 
BEGIN 
    -- your code 
END 
ELSE 
BEGIN 
    -- your code 
END 
+0

Cảm ơn bạn đã trả lời Darren. Mã không hoạt động. Msg 156, Cấp 15, Tiểu bang 1, Thủ tục CheckAdminExists, Dòng 8. Trong dòng: DECLARE @RetVal INT – user1011394

+0

@ user1011394 được chỉnh sửa lại - chức năng hoạt động. –

+4

COUNT có thể đắt hơn một EXISTS –

3

Trên thực tế, sử dụng FUNCTION.

Nhưng nếu bạn cần trả lại nhiều hơn 1, hãy sử dụng thông số OUTPUT.

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