2009-11-27 8 views
76

Tôi đang viết một số procs được lưu trữ trong SQL Server 2008 và tự hỏi liệu khái niệm về tham số đầu vào tùy chọn có thể ở đây không?tham số tùy chọn trong SQL Server được lưu trữ proc?

Tôi cho rằng tôi luôn có thể chuyển sang NULL cho các thông số tôi không muốn sử dụng, kiểm tra giá trị trong proc được lưu trữ, sau đó lấy mọi thứ từ đó, nhưng tôi quan tâm nếu khái niệm có sẵn ở đây. Cảm ơn!

+1

Hãy lâu đọc tại trang web Erland, ông có một số thông tin tuyệt vời về điều kiện tìm kiếm động: http://www.sommarskog.se/dyn-search.html –

Trả lời

140

Bạn có thể tuyên bố như thế này

CREATE PROCEDURE MyProcName 
    @Parameter1 INT = 1, 
    @Parameter2 VARCHAR (100) = 'StringValue', 
    @Parameter3 VARCHAR (100) = NULL 
AS 

/* check for the NULL/default value (indicating nothing was passed */ 
if (@Parameter3 IS NULL) 
BEGIN 
    /* whatever code you desire for a missing parameter*/ 
    INSERT INTO ........ 
END 

/* and use it in the query as so*/ 
SELECT * 
FROM Table 
WHERE Column = @Parameter 
+0

Cảm ơn cả hai câu trả lời của bạn! – larryq

+0

nếu tham số là loại uniqueidentifier thì sao? ví dụ @userId uniqueidentifier –

+1

Trả lời @RKSharma cho bất kỳ ai tự hỏi quá - nó hoạt động giống với các uniqueidentifiers. – rinukkusu

41

Vâng, đúng vậy. Khai báo thông số như vậy:

@Sort varchar(50) = NULL 

Bây giờ bạn thậm chí không phải vượt qua các tham số trong đó sẽ mặc định là NULL (hoặc bất cứ điều gì bạn chọn để mặc định)..

+0

Bạn thậm chí không cần '= NULL' –

+3

Bạn có chắc bạn không cần nó? –

+32

OMG Ngựa, nếu bạn không bao gồm = , thì thông số sẽ được yêu cầu. Bạn có thể chuyển nó thành NULL, nhưng sau đó bạn chỉ cần chuyển logic đó sang (các) ứng dụng sử dụng thủ tục đó. –