Я пытался выполнить хранимую процедуру MS SQL Server через JDBC сегодня и до сих пор безуспешно. Хранимая процедура имеет 1 входной и 1 выходной параметр. С каждой комбинацией, которую я использую при настройке вызова хранимой процедуры в коде, я получаю сообщение о том, что хранимая процедура не может быть найдена. Я предоставил хранимую процедуру, которую выполняю ниже (ПРИМЕЧАНИЕ: это код поставщика, поэтому я не могу его изменить).
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[spWCoTaskIdGen]
@OutIdentifier int OUTPUT
AS
BEGIN
DECLARE @HoldPolicyId int
DECLARE @PolicyId char(14)
IF NOT EXISTS
(
SELECT *
FROM UniqueIdentifierGen (UPDLOCK)
)
INSERT INTO UniqueIdentifierGen VALUES (0)
UPDATE UniqueIdentifierGen
SET
CurIdentifier = CurIdentifier + 1
SELECT @OutIdentifier =
(SELECT CurIdentifier
FROM UniqueIdentifierGen)
END
Код выглядит так:
CallableStatement statement = connection
.prepareCall("{call dbo.spWCoTaskIdGen(?)}");
statement.setInt(1, 0);
ResultSet result = statement.executeQuery();
Я получаю следующую ошибку: SEVERE: не удалось найти хранимую процедуру 'dbo.spWCoTaskIdGen'.
Я тоже пробовал
CallableStatement statement = connection
.prepareCall("{? = call dbo.spWCoTaskIdGen(?)}");
statement.registerOutParameter(1, java.sql.Types.INTEGER);
statement.registerOutParameter(2, java.sql.Types.INTEGER);
statement.executeQuery();
Приведенные выше результаты приводят к: SEVERE: не удалось найти хранимую процедуру 'dbo.spWCoTaskIdGen'.
Я также пробовал:
CallableStatement statement = connection
.prepareCall("{? = call spWCoTaskIdGen(?)}");
statement.registerOutParameter(1, java.sql.Types.INTEGER);
statement.registerOutParameter(2, java.sql.Types.INTEGER);
statement.executeQuery();
Приведенный выше код привел к следующей ошибке: Не удалось найти хранимую процедуру spWCoTaskIdGen.
Наконец, я должен также указать на следующее:
Я использовал инструмент MS SQL Server Management Studio и смог успешно запустить хранимую процедуру. SQL, созданный для выполнения хранимой процедуры, представлен ниже:
GO
DECLARE @return_value int;
DECLARE @OutIdentifier int;
EXEC @return_value = [dbo].[spWCoTaskIdGen] @OutIdentifier = @OutIdentifier OUTPUT;
SELECT
@OutIdentifier [@OutIdentifier],
@return_value [Return Value];
GO
Выполняемый код выполняется с тем же идентификатором пользователя, который использовался в пункте № 1 выше.
- В коде, который создает объект Connection, я записываю, к какой базе данных я подключаюсь, и код подключается к правильной базе данных.
Есть идеи?
Заранее большое спасибо.