首页 > 解决方案 > 参数类型为 varbinary 的 Java 调用存储过程

问题描述

想查询是否有人知道如何在java中使用三个参数(前两个是varchar,第三个是varbinary)调用存储过程,我试图通过jpa的nativequery调用它

来自 SQL Server 的存储过程调用脚本

DECLARE @userSid as VARBINARY(100)
SET @test_id = SUSER_SID('test_account')
select @test_id;

EXEC dbo.testUser 'test','test',@test_id

下面是我尝试从 nativequery 执行存储过程的内容

@Query(value = "{call testUser(:name,:Application,:test_id)}",nativeQuery=true)
    public Object callTestProcedure(@Param("name") String name,@Param("Application") String Application,@Param("test_id") byte[] test_id); 

尝试如下调用它..

callTestProcedure("Truview","TruViewDataHub",Base64.decodeBase64("0x01050000000000051500000011D81D73D36F037181499C550F1A0000"))

但这不起作用,任何帮助将不胜感激..谢谢

更新..也尝试转换为十六进制如下

String hex=String.format("%040x", new BigInteger(1, "0x01050000000000051500000011D81D73D36F037181499C550F1A0000".getBytes("UTF-8")));
callTestProcedure("Truview","TruViewDataHub",hex);

这将导致另一个错误“不允许从数据类型 nvarchar 到 varbinary 的隐式转换。使用 CONVERT 函数运行此查询。”

标签: javasql-serverspring-bootjpastored-procedures

解决方案


推荐阅读