2009-10-05 23 views

Trả lời

7

Cung cấp giá trị mặc định cho thông số thủ tục được lưu trữ sẽ làm cho tùy chọn trở thành tùy chọn.

EDIT:

CREATE PROC [EDURE] [chủ sở hữu. ]
procedure_name [; số]
[{@parameter data_type}
[khác nhau] [= mặc định] [OUTPUT]
] [, ... n]

mặc định

Là một giá trị mặc định cho tham số. Nếu mặc định được xác định, thủ tục có thể được thực thi mà không chỉ định giá trị cho thông số đó. Mặc định phải là hằng số hoặc có thể là NULL. Có thể bao gồm các ký tự đại diện (%, _, [] và [^]) nếu quy trình sử dụng thông số với từ khóa LIKE.

Xin xem - http://msdn.microsoft.com/en-us/library/aa258259%28SQL.80%29.aspx

3

Yes. Danh sách các thông số "tùy chọn" ở cuối danh sách tham số và cung cấp cho họ một giá trị mặc định (thường là NULL):

CREATE PROCEDURE MyProcedure 
    @param1 int, 
    @param2 varchar(200), 
    @thing_id int = NULL 
AS 

    If @thing_id IS NULL Begin 
     /* ... */ 
    End 

END 
+0

@Joel: Có cần thiết phải có các thông số tùy chọn, hướng tới kết thúc? Tôi nghĩ, tốt hơn là nên làm điều đó từ quan điểm khả năng sử dụng. Có đúng không? – shahkalpesh

+0

Không, nhưng nó chắc chắn là một thực hành tốt nhất. –

14

Khi bạn tạo các thủ tục lưu trữ, tạo ra nó như thế này

Create Proc MyProc 
@Param1 VarChar (20), 
@Param2 VarChar (20) = NULL 
AS 

-- Your code here 

GO 

Param1 được bắt buộc

Param2 là tùy chọn

+0

Cảm ơn bạn Raj. Điều đó thật dễ dàng –

0

Đặt sang trọng niềm vui của mã lệnh SQL sẽ mang lại, có thể bạn có thể. Bạn có thể đặt giá trị mặc định cho các thông số

CREATE PROCEDURE DoStuff @param1 varchar(20) = null 

Sau đó, bên trong thủ tục lưu trữ

IF @param1 IS NOT NULL 
BEGIN 
    ... Do stuff 
END 

Bạn có thể thiết lập giá trị mặc định được bất cứ điều gì bạn muốn.

0
CREATE PROCEDURE SQL_INJECTION(
@MandatoryA int, 
@MandatoryB varchar(50), 
@MandatoryC datetime, 
@OptionalA varchar(50) = NULL 
) 
AS 

-- PUT YOUR DYNAMIC SQL HERE 

GO 

Để gọi

EXEC dbo.SQL_INJECTION @MandatoryA = 1, @MandatoryB = 'test', @MandatoryC = '2009-10-05', @OptionalA = DEFAULT 

Note1: Dynamic SQL = SQL Injection

+0

"SQL động = SQL Injection" không nhất thiết phải đúng. Nó phụ thuộc vào nếu bạn sử dụng giá trị do người dùng cung cấp để xây dựng chuỗi SQL động của bạn hay không. Bạn có thể dễ dàng xây dựng một chuỗi SQL động chỉ dựa trên logic trong thủ tục lưu sẵn, sau đó chuyển các giá trị do người dùng cung cấp vào câu lệnh động thông qua các tham số.Mã OP sẽ được mở để tiêm SQL, nhưng không phải tất cả SQL động. – nicko

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