У меня есть хранимая процедура, которая должна возвращать bigint
в качестве выхода. ниже, если определение.Возврат Bigint в хранимой процедуре
В теле я вставляю строку в таблицу и возвращаю идентификатор, используя @@Identity
в переменной @LogID
.
Все работает, кроме возвратной части. Я попробовал кастинг, преобразование, выбор и установление @LogID
в @@identity
, но не повезло.
Сохраненный proc вызывается блоком регистрации в корпоративной библиотеке. Я использую метод Write
класса Logwriter
. Это стандартный класс, предоставляемый Microsoft, и мы его не модифицировали. Я не могу показать вам код, который вызывает процедуру, так как это DLL и не имеет исходного кода. Во всяком случае, я уверен, что это не код C#, так как я получаю SQLException
, поэтому это что-то в sql. Код ниже для краткости, и есть много других столбцов, которые я удалил. Все они представлены в качестве входных параметров.
Я уверен, что это глупая вещь, но я ее как-то не хватает.
CREATE PROCEDURE [dbo].[WriteLog]
(
@EventID int,
@Priority int,
@LogId bigint OUTPUT
)
INSERT INTO [Log] (EventID, Priority)
VALUES(@EventID,@Priority)
SET @LogID = @@identity
Go
Не используйте здесь @@ IDENTITY. Вместо этого вы должны использовать SCOPE_IDENTITY. Если у вас есть триггер в вашей таблице журналов, который содержит вставку с столбцом идентификации, ваша процедура получит это значение. Что вы подразумеваете, возвратная часть не работает? Как вы это называете? –
Я бы положил деньги на то, что забыл * также * включить ключевое слово 'OUTPUT' в том месте, где вы * вызываете * хранимую процедуру. Но вы не показали нам этот код. –
@SeanLange Нет У меня нет триггера в таблице журналов. Этот код является частью моей реализации блока регистрации корпоративной библиотеки. Процедура WriteLog должна возвращать результат в соответствии с требованием Библиотеки. Моя база данных собирается пересечь предел столбца Int for LogID, и мне нужно изменить его на bigint для продолжения ведения журнала. Код работает, если вывод Int, но не тогда, когда Bigint –