代码之家  ›  专栏  ›  技术社区  ›  chama

GetDate()导致SQL Server 2008中出现语法错误

  •  2
  • chama  · 技术社区  · 14 年前

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

    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 回复  |  直到 14 年前
        1
  •  3
  •   JosephStyons    14 年前

    尝试

    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 
    
        2
  •  3
  •   JNK    14 年前

    不能在参数afaik中调用函数。

    我用过的是:

    ALTER PROCEDURE [dbo].[myStoredProc] 
         @process_dt DATETIME = null
    
    AS   
    
    IF @process_dt IS NULL
        BEGIN       
            SET @TimeComplete = GETDATE()
        END 
    

    为您现在想要默认的每个变量添加一个这样的变量。或者,在过程的开始(内部)声明一个变量,并将所有时间都设置为该变量。这样,它们在内部是一致的(之间没有毫秒的变化)。

        3
  •  2
  •   gbn    14 年前

    存储过程参数将常量或空作为默认值

    CREATE PROCEDURE

    违约

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

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

        4
  •  0
  •   Security Hound    14 年前

    我怀疑您出现问题的原因是您试图调用存储过程参数中的函数。

    我研究存储过程的工作原理已经一年多了,如果我的内存正确的话,您应该能够将当前时间存储到一个局部变量中并使用该值。

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