GETDATE()导致SQL Server 2008中的语法错误

时间:2010-11-08 19:11:15

标签: sql sql-server-2008

我刚刚创建了一个存储过程,在执行一些计算后将数据插入到表中。我的创建过程代码如下:

ALTER PROCEDURE [dbo].[myStoredProc] 
    @log_id INT,
    @job_nm VARCHAR(20),
    @feed_in_out_ind CHAR(1) = null,
    @process_dt DATETIME = null,
    @procedure_dt DATETIME = NULL,  
    @procedure_nm VARCHAR(20),
    @object_ty VARCHAR(20),
    @operation_ty VARCHAR(20),
    @num_records INT,
    @success_status BIT,
    @error_msg VARCHAR(50) = NULL,
    @start_time DATETIME,
    @end_time DATETIME = null
AS    

当我尝试调用存储过程时,如果我对任何日期时间使用GETDATE(),我会收到语法错误Incorrect syntax near ')'当我用实际日期时间替换GETDATE()时,过程运行正确。

这是我的主叫代码:

EXEC myStoredProc 
    @log_id = 1, 
    @job_nm = 'It',
    @feed_in_out_ind = 'i',
    @process_dt = GETDATE(),
    @procedure_dt = GETDATE(),
    @procedure_nm = 'Test 1', 
    @object_ty = 'test',
    @operation_ty = 'test',  
    @num_records = 50, 
    @success_status = 0, 
    @error_msg = 'Hello',
    @start_time = GETDATE(),
    @end_time = GETDATE()

有什么想法吗?感谢。

4 个答案:

答案 0 :(得分:3)

尝试

DECLARE @Now AS DATETIME
SET @Now = GETDATE()

EXEC myStoredProc 
    @log_id = 1, 
    @job_nm = 'It',
    @feed_in_out_ind = 'i',
    @process_dt = @Now ,
    @procedure_dt = @Now ,
    @procedure_nm = 'Test 1', 
    @object_ty = 'test',
    @operation_ty = 'test',  
    @num_records = 50, 
    @success_status = 0, 
    @error_msg = 'Hello',
    @start_time = @Now ,
    @end_time = @Now 

答案 1 :(得分:3)

您无法在参数AFAIK中调用函数。

我用过的东西是:

ALTER PROCEDURE [dbo].[myStoredProc] 
     @process_dt DATETIME = null

AS   

IF @process_dt IS NULL
    BEGIN       
        SET @TimeComplete = GETDATE()
    END 

为您想要默认的每个变量添加其中一个。或者,在proc(INSIDE IT)的开头声明一个变量,并将所有时间设置为该变量。这样它们在内部是一致的(两者之间没有毫秒差异)。

答案 2 :(得分:2)

存储的proc参数采用常量或NULL作为默认值

来自CREATE PROCEDURE

  

默认

     

是参数的默认值。如果定义了默认值,则可以在不指定该参数值的情况下执行该过程。默认值必须是常量,或者可以为NULL。

通常我会在存储过程中执行SET @dtparam = ISNULL(@dtparam, GETDATE())

答案 3 :(得分:0)

我怀疑你遇到问题的原因是你试图在存储过程的参数中调用一个函数。

自从我研究存储过程如何正常工作已经超过一年如果我的内存是正确的,你应该能够将当前时间存储到本地变量并使用该值。

我想我的发帖很慢,因为“解决方法”正是我的建议:$