Объявление даты и времени в хранимых процедурах MS SQL

#sql-server #mssql-jdbc

#sql-сервер #mssql-jdbc

Вопрос:

Я пытаюсь получить системную дату и время для столбца, когда новая строка вставляется или обновляется в таблицу с использованием сохраненной процедуры в MS SQL. Как я могу этого достичь? Я попробовал приведенный ниже код

 CREATE PROCEDUCE test_Cl_INSERT
@SRC_ID int,
@CREATED_BY datatime
AS 
BEGIN
INSERT into dbo.CL_Batch(SRC_ID, Created_BY)
VALUES(@SRC_ID, CURRENT_TIMESTAMP)
END

EXEC dbo.test_Cl_INSERT
@SRC_ID=44
 

ОШИБКА: отсутствует параметр @CREATED_BY

Комментарии:

1. Учитывая, что вы не ссылаетесь @CREATED_BY на свою Процедуру, зачем вам это нужно?

2. «END» не завершает код вашей хранимой процедуры, так что оператор EXEC также является частью вашей процедуры.

3. Код, который я упомянул здесь, является примером. В моей таблице много столбцов.

4. @SMor я буду выполнять сохраненные инструкции proc и EXEC отдельно!

5. «Код, который я упомянул здесь, является примером. В моей таблице много столбцов. » Это не меняет моего утверждения. В приведенном вами примере вы не ссылаетесь @CREATED_BY , поэтому нет смысла существовать. Это только укрепляется, когда вы затем не включаете его в свой EXEC оператор. Если приведенный выше пример не соответствует имеющемуся у вас фактическому коду, опубликуйте что-нибудь репрезентативное .

Ответ №1:

Это будет работать:

 CREATE PROCEDURE test_Cl_INSERT
@SRC_ID int 
AS 
BEGIN
INSERT into dbo.CL_Batch(SRC_ID, Created_BY)
VALUES(@SRC_ID, CURRENT_TIMESTAMP)
END
 

EXEC dbo.test_Cl_INSERT
@SRC_ID=44

Ответ №2:

Ваша процедурная подпись:

 CREATE PROCEDUCE test_Cl_INSERT
  @SRC_ID int,
  @CREATED_BY datatime
 

Вы пытаетесь выполнить как:

 EXEC dbo.test_Cl_INSERT @SRC_ID=44
 

Вы видите, чего-то не хватает? Ты должен. Ваша процедура имеет 2 параметра, но вы предоставляете только 1, когда пытаетесь ее выполнить. Это твоя проблема. Как уже отмечалось, вы не используете этот параметр в логике процедуры, так почему же он вообще существует?

Вы должны выполнить свою процедуру следующим образом:

 EXEC dbo.test_Cl_INSERT @SRC_ID=44, @CREATED_BY = '20201124 12:49'; 
 

Обратите внимание, что я только что присвоил параметру случайное значение, поскольку оно (параметр) не используется в вашем процедурном коде. Это решает вопрос, который вы задаете. Однако у вас есть более важные вопросы для рассмотрения.