Hàm SQL làm giá trị tham số mặc định?


105

Tôi đã thử thay đổi giá trị tham số mặc định bằng:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

và tất cả các trình biên dịch trước SQL đã cung cấp cho tôi lỗi này:

Msg 102, Mức 15, Trạng thái 1, Thủ tục my_sp, Dòng 8 Cú pháp không chính xác gần '('.

Tôi đã tạo thủ tục. (Tôi không chắc liệu điều đó có liên quan hay không.) Tôi đang sử dụng giá trị mặc định null và kiểm tra điều đó sau đó, nhưng điều đó có vẻ không đúng. Tôi có thể làm điều này trong một dòng không?


Cập nhật: Tôi đã tắt mô tả của MSDN về các tham số thủ tục được lưu trữ :

[= default] Là giá trị mặc định cho tham số. Nếu giá trị mặc định được xác định, hàm có thể được thực thi mà không cần chỉ định giá trị cho tham số đó.

Lưu ý:
Giá trị tham số mặc định có thể được chỉ định cho các hàm CLR ngoại trừ kiểu dữ liệu varchar (max) và varbinary (max).

Khi một tham số của hàm có giá trị mặc định, từ khóa DEFAULT phải được chỉ định khi hàm được gọi để lấy giá trị mặc định. Hành vi này khác với việc sử dụng các tham số có giá trị mặc định trong các thủ tục được lưu trữ trong đó việc bỏ qua tham số cũng ngụ ý giá trị mặc định.

Tôi đang đọc sai?

Cảm ơn nhiều.

Câu trả lời:


160

Giá trị mặc định cho tham số thủ tục được lưu trữ phải là hằng số . Bạn cần làm như sau ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

36
hoặc SET @currentDate = COALESCE (@ currentDate, GETDATE ())
SQLMenace

Tôi đã sử dụng nó trước đây. "Tôi đang sử dụng giá trị mặc định null và kiểm tra điều đó sau nhưng nó có vẻ không đúng." Vẫn cảm ơn Brian.
user58044

Giải pháp này là hoàn hảo.
R.Katnaan

35

Tôi không nghĩ điều đó là có thể, bạn phải sử dụng giá trị theo nghĩa đen (hằng số) làm giá trị mặc định.

Tuy nhiên, bạn có thể làm điều này:

Set @currentDate = Coalesce(@currentDate , GetDate())

13

Bạn có thể thử như sau:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())

8

Tôi suy luận rằng bạn đang sử dụng Microsoft SQL Server từ dấu ngoặc vuông trong ví dụ của bạn.

Từ MSDN :

Chỉ một giá trị không đổi, chẳng hạn như một chuỗi ký tự; một hàm vô hướng (có thể là hệ thống, do người dùng xác định hoặc hàm CLR); hoặc NULL có thể được sử dụng làm mặc định.

Hàm GETDATE()trả về một giá trị khác theo thời gian, vì vậy nó không phải là một biểu thức hằng.


2

Giá trị đó không xác định và không thể được sử dụng


0

Gợi ý:

Đặt mặc định thành NULL

Làm Mặc định GETDATE()ở giao diện người dùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.