#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';
Обратите внимание, что я только что присвоил параметру случайное значение, поскольку оно (параметр) не используется в вашем процедурном коде. Это решает вопрос, который вы задаете. Однако у вас есть более важные вопросы для рассмотрения.