我試圖從 azure sql 呼叫一個基本的存盤程序,它只是回傳數字 1,它看起來像這樣
CREATE PROCEDURE [dbo].[testProc]
@TableName varchar(100)
AS
BEGIN
SET NOCOUNT ON
SELECT 1
END
我有一個 Spring Boot 應用程式嘗試使用 @Query 注釋呼叫存盤程序
@Repository
@Transactional
public interface TestDAO extends JpaRepository<TestEntity, Long> {
@Query(value = "CALL testProc(:TableName)", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
}
但是,我收到一個例外,顯示“'@P0' 附近的語法不正確”和 SQLGrammarException:無法提取 ResultSet。
我不知道如何解決這個問題,我嘗試將 @Procedure 與 @NamedStoredProcedureQueries 注釋一起使用,但它拋出了另一個例外,說“無法將位置引數與命名引數注冊混合;”
uj5u.com熱心網友回復:
根據Azure Sql的檔案,您必須使用以下命令呼叫存盤程序
EXECUTE HumanResources.uspGetEmployeesTest2 N'Ackerman', N'Pilar';
-- 或者
EXEC HumanResources.uspGetEmployeesTest2 @LastName = N'Ackerman', @FirstName = N'Pilar';
所以在你的情況下,這將被翻譯為
@Query(value = "EXECUTE testProc :TableName", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
或者
@Query(value = "EXEC testProc @TableName = :TableName", nativeQuery = true)
Long invokeTestProc(@Param("TableName") String TableName);
因此,考慮到您使用本機查詢,
例外顯示“'@P0' 附近的語法不正確”和 SQLGrammarException:無法提取 ResultSet。
指的是錯誤使用 sql 語法,其中不使用 execute 或 exec,并且還以 Azure SQL 不期望的方式傳遞引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/389918.html
上一篇:如何使用SQLBigQuery一次在多列中查找空值?
下一篇:VARCHAR的OVER子句
