Dưới đây là mã của tôi:Stored Procedure giá trị tham số mặc định - là này một hằng số hoặc một biến
USE [xxx]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[problemParam]
@StartDate INT = CONVERT(INT,(CONVERT(CHAR(8),GETDATE()-130,112))),
@EndDate INT = NULL
AS
BEGIN
SSMS
là không quá hài lòng với mặc định giá trị tôi đã sử dụng - trong MSDN DEFINITION HERE nó nói rằng giá trị mặc định cần phải là một hằng số thay vì một biến.
Có phải là CONVERT(INT,(CONVERT(CHAR(8),GETDATE()-130,112)))
biến hoặc hằng số không? Nó không phải là một biến trong cách truyền thống tôi nghĩ về một biến nhưng sau đó một lần nữa nó không phải là một hằng số như '03 jan 2013'
là.
Làm cách nào để giải quyết vấn đề này? Di chuyển CONVERT(INT,(CONVERT(CHAR(8),GETDATE()-130,112)))
đến ứng dụng khách đang gọi thủ tục được lưu trữ?
EDIT
có thể trùng lặp như tôi vừa phát hiện này SO POST
Kết quả của 'GETDATE()' * thay đổi * theo thời gian sao cho nó không thể không đổi. Sử dụng NULL/một giá trị ma thuật cho một mặc định, phát hiện nó và gán biểu thức của bạn nên nó phù hợp. –
@AlexK. Tôi không chắc chắn nếu bạn là chính xác: chắc chắn 'GETDATE()' được đánh giá khi nó được gọi và sau đó không đổi. Xem [** các bài đăng trên blog này **] (http://sqlblog.com/blogs/andrew_kelly/archive/2008/03/01/when-a-function-is-indeed-a-constant.aspx) - xem có thể gây tranh cãi – whytheq