GETDATE () вызывает синтаксическую ошибку в SQL Server 2008 - PullRequest
2 голосов
/ 08 ноября 2010

Я только что создал хранимую процедуру для вставки данных в таблицу после выполнения некоторых вычислений. Мой код процедуры создания ниже:

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 () для какого-либо из datetime, я получаю синтаксическую ошибку Incorrect syntax near ')' Когда я заменяю GETDATE () фактическим datetime, процедура выполняется правильно.

Вот мой телефонный код:

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 ]

3 голосов
/ 08 ноября 2010

Вы не можете вызывать функцию в параметрах AFAIK.

Я использовал следующее:

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

AS   

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

Добавьте одну из них для каждой переменной, для которой вы хотите использовать значение по умолчаниюсейчас.Или объявите переменную в начале процедуры (INSIDE IT) и установите для нее все время.Таким образом, они внутренне непротиворечивы (без разницы в миллисекундах).

3 голосов
/ 08 ноября 2010

Попробуйте

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 голосов
/ 08 ноября 2010

Параметры хранимых процедур по умолчанию принимают константы или NULL

С ПРОЦЕДУРА СОЗДАНИЯ

по умолчанию

Это значение по умолчанию для параметра. Если задано значение по умолчанию, процедура может быть выполнена без указания значения для этого параметра. Значение по умолчанию должно быть константой или может быть NULL.

Обычно я делал бы SET @dtparam = ISNULL(@dtparam, GETDATE()) в хранимой процедуре

0 голосов
/ 08 ноября 2010

Я подозреваю, что причина ваших проблем в том, что вы пытаетесь вызвать функцию в параметре хранимой процедуры.

Прошло больше года с тех пор, как я исследовал, как именно работают хранимые процедуры, если моя память верна, вы сможете сохранить текущее время в локальной переменной и использовать это значение.

Полагаю, мне пришлось замедлить публикацию, потому что "обходной путь" был именно тем, что я предложил: $

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...