【发布时间】:2013-01-03 11:21:04
【问题描述】:
这是我的代码:
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 对我使用的 default 值不太满意 - 在MSDN DEFINITION HERE 中它说默认值需要是常量而不是变量。
CONVERT(INT,(CONVERT(CHAR(8),GETDATE()-130,112))) 是变量还是常量?它不是我认为变量的传统方式的变量,但它又不是像'03 jan 2013' 那样的常量。
我该如何解决这个问题?将CONVERT(INT,(CONVERT(CHAR(8),GETDATE()-130,112))) 移动到调用存储过程的客户端?
编辑
可能重复,因为我刚刚发现了这个SO POST
【问题讨论】:
-
GETDATE()的结果因时间而异,因此它不可能是恒定的。使用 NULL/a 魔法值作为默认值,检测它并在匹配时分配您的表达式。 -
@AlexK。我不确定你是否正确:
GETDATE()在被调用时肯定会被评估,然后是常量。见these blog posts - 值得商榷
标签: sql stored-procedures sql-server-2008-r2