2010-07-19 35 views
10

Tôi có một hàm do người dùng định nghĩa được sử dụng trong nhiều quy trình được lưu trữ sẽ trả lại cho tôi một số giá trị. Nếu nó có thể cho tôi để thêm một tham số tùy chọn mới cho cùng một.Tham số tùy chọn trong máy chủ SQL

Nếu tôi không vượt qua bất kỳ giá trị nào, giá trị này phải là giá trị rỗng và nếu tôi chuyển một số giá trị, nó sẽ được sử dụng. Tôi không muốn đi và thay đổi tất cả các thủ tục được lưu trữ để làm như vậy.

Ví dụ mã

dbo.CalculateAverageForUser(userid int) 

Tôi có thể sử dụng dbo.CalculateAverageForUser(userid int, type NVARCHAR(10) = NULL)

+1

Nếu bạn đăng mã hoặc XML, hãy làm nổi bật những dòng đó trong trình soạn thảo và nhấp vào nút "mã" (101 010) trên thanh công cụ của trình soạn thảo định dạng và cú pháp làm nổi bật nó! –

Trả lời

12

Nếu bạn không muốn đi điều chỉnh tất cả các thủ tục lưu trữ hiện tại của bạn mà tham khảo các chức năng sau đó tôi nghĩ rằng bạn sẽ cần phải tạo ra một chức năng mới với mã từ hiện tại của bạn một

CREATE FUNCTION CalculateAverageForUser2 
(
    @userid int, 
    @param2 nvarchar(10) = NULL 
) 
RETURNS float 
AS 
/*Code from existing function goes here*/ 

Sau đó chỉ cần thay đổi chức năng hiện có thành

ALTER FUNCTION CalculateAverageForUser 
(
@userid int 
) 
RETURNS float 
AS 
BEGIN 
RETURN dbo.CalculateAverageForUser2(@userid, DEFAULT) 
END 
3

Tôi nghĩ rằng cách dễ nhất là để thực hiện một CalculateAverageForUserAndType stored procedure (int userid, gõ NVARCHAR (10)) Đặt mã ban đầu của bạn bên trong mới thủ tục. Sau đó, thay đổi CalculateAverageForUser thành

dbo.CalculateAverageForUser(int userid) 
AS 
BEGIN 
    EXEC CalculateAverageForUserAndType userid, NULL 

END 

Bằng cách này bạn có thể từ từ di chuyển sang thủ tục lưu trữ mới và thao tác cũ vẫn hoạt động.

+0

Điều này sẽ làm tốt. Xấu hổ bạn không thể quá tải, cũng như sử dụng các thông số mặc định. Nhưng sau đó SQL không phải là C++ .... – Ragster

+0

Điều này sẽ không hoạt động. Bạn không thể gọi các thủ tục được lưu trữ từ bên trong các hàm. –

+0

vẫn còn ý tưởng tương tự nhưng sau đó có chức năng. –

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