2012-07-27 52 views
0

我在這裏工作在SQL Server 2005中,我想知道是否有一種方法可以使存儲過程對參數採用變量a或變量b。存儲過程採取任一個或變量?

現在,如果我聲明A和B,它需要A和B.可以使它代替A或B嗎?所以如果另一個沒有價值,它會使用另一個?

例如:

@ID VARCHAR(255) 
@MAKE VARCHAR(255) 
AS 
BEGIN 
    SET NOCOUNT ON 
    SELECT * 
    FROM CARS 
    WHERE ID = @ID OR MAKE [email protected] 

謝謝!

+0

你能發佈你的代碼嗎? – 2012-07-27 01:27:57

+0

編輯它。希望清除它 – user1512593 2012-07-27 01:33:50

回答

1
create procedure MyProcedure 
(
    @ID VARCHAR(255) = NULL, 
    @MAKE VARCHAR(255) = NULL 
) 
AS 

    SET NOCOUNT ON 

    SELECT * 
    FROM CARS 
    WHERE 
     (@ID IS NOT NULL AND ID = @ID) 
     OR 
     (@MAKE IS NOT NULL AND MAKE [email protected]) 
+0

剛試過這個。它仍然想讓我進入製造。 – user1512593 2012-07-27 01:43:21

+0

@ user1512593固定。 – Bert 2012-07-27 01:44:31

+0

謝謝你的工作 – user1512593 2012-07-27 01:52:16

1
IF ID IS NULL 
    BEGIN 
     /*Code goes here*/ 
    END 
ELSE IF MAKE IS NULL 
    BEGIN 
     /*More code goes here*/ 
    END 
ELSE 
    BEGIN 
     /*Even more code goes here*/ 
    END 

我敢肯定,你可以使用NULL調用一個函數。

而且,也這樣做:

@ID VARCHAR(255) = NULL 
@MAKE VARCHAR(255) = NULL 

閱讀:http://weblogs.asp.net/stanleygu/archive/2010/02/08/solution-5-implementing-optional-parameters-in-t-sql-stored-procedures.aspx

+0

謝謝!鏈接幫助了很多。 – user1512593 2012-07-27 01:51:59

1

存儲過程可以採取可選的參數。

create procedure mysp 
    @a varchar(255) = NULL, 
    @b varchar(255) = NULL 
as begin 
    select * 
    from cars 
    where (a = @a and @a is not NULL) or 
       (b = @b and @b is not NULL); 
end;