2010-11-08 3 views
2

Я только что создал хранимую процедуру для вставки данных в таблицу после выполнения некоторых вычислений. Моя создать процедуру код ниже:GETDATE() вызывает синтаксическую ошибку в 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() для любого из DateTimes, я получаю ошибку синтаксиса 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() 

Любые идеи? Благодарю.

ответ

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 
+2

Большие обходной, но это не дает никакого объяснения основной проблемы. –

+0

Это сработало - Спасибо. Проблема в том, что я буду вызывать эту процедуру из многих других хранимых процедур. Мне действительно нужно понять, что вызвало это, поэтому его можно обойтись менее разумно. – chama

+3

Это не полоса. См. «Указание параметров» на этой странице в документах: http://msdn.microsoft.com/en-us/library/ms189915(v=SQL.100).aspx. – Anna

0

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

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

Я предполагаю, что я должен был замедлить на сообщение, потому что «обходной путь» было именно то, что я предложил: $

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

Хранимые параметры Proc принимают константы или NULL в качестве значений по умолчанию

От CREATE PROCEDURE

умолчанию

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

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

+0

+1 - gbn соглашается с нами!:) – JNK

+0

@JNK: Неужели я так плохо? – gbn

+0

Совсем нет. Тем не менее, вы не будете наносить удары, если что-то не так. – JNK

Смежные вопросы