jdbc 呼叫 sql server 的儲存過程時“該語句沒有返回結果集”的解決方法
在JDBC中呼叫SQL Server中的儲存過程時出現如下異常:
-
com.microsoft.sqlserver.jdbc.SQLServerException: 該語句沒有返回結果集。
-
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
-
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:394)
-
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
-
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
-
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
-
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
-
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
-
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283)
-
解決方法,新增下面程式碼
SET NOCOUNT ON
下面是一個儲存過程案例,裡面用到了"臨時表"技術
-
USE [xngzf] GO /****** Object: StoredProcedure [dbo].[PROC_GzfRentMonthZj] Script Date: 01/03/2014 16:49:50 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[PROC_GzfRentMonthZj] @fyXqCode varchar(50), @fyDhCode varchar(50), @affairsMonth varchar(50), @lastPerson varchar(50), @lastGov varchar(50) as SET NOCOUNT ON declare @htID varchar(50) declare @chengzfID varchar(50) declare @fyID varchar(50) declare @accountID varchar(50) declare @accountTotal decimal(28, 2) declare @fyzjMonth decimal(28, 2) declare @htCode varchar(50) declare @chengzfName varchar(50) declare @fyName varchar(500) declare @acountTotal decimal(28, 2) declare @resultInfo varchar(500) declare @Num int = 0 declare @i int = 1 /**建立臨時表,返回錯誤資訊**/ create table Du_ErrorInfo ( htCode varchar(50), chengzfName varchar(50), fyName varchar(500), accountID varchar(50), accountTotal decimal(28, 2), fyzjMonth decimal(28, 2), resultInfo varchar(50) DEFAULT '賬戶餘額不足', ) /**獲得總數**/ set @Num = (select COUNT(*) from tb_xngzf_basic_ht ht left join tb_xngzf_basic_fang fy on ht.fyID = fy.fyID left join tb_xngzf_basic_chengzf czf on ht.chengzfID = czf.zuhuID left join tb_qx_weidu xq on xq.weiduID = fy.fyXqCode --關聯得到小區名稱 left join tb_qx_weidu dh on dh.weiduID = fy.fyDhCode --關聯得到棟號名稱 left join tb_xngzf_basic_ht_child chd on ht.htID = chd.htID where 1=1 and ht.isPayMonenty = 2 and @affairsMonth between substring(replace(chd.startDate, '-', ''), 0, 7) and substring(replace(chd.endDate, '-', ''), 0, 7) and fy.fyXqCode = @fyXqCode and fy.fyDhCode = @fyDhCode) while( @i<[email protected] ) begin /**查詢htID, chengzfID, fyID**/ select @htID=fo.htID, @chengzfID=fo.chengzfID, @fyID=fo.fyID, @htCode=fo.htCode, @chengzfName=fo.chengzfName, @fyName=fo.fyName from( select ht.htID, ht.chengzfID, ht.fyID, ROW_NUMBER() over(order by ht.htID) as rowNumber, ht.htCode, czf.zuhuName as chengzfName, xq.weiduName+dh.weiduName+fy.fyFh as fyName from tb_xngzf_basic_ht ht left join tb_xngzf_basic_fang fy on ht.fyID = fy.fyID left join tb_xngzf_basic_chengzf czf on ht.chengzfID = czf.zuhuID left join tb_qx_weidu xq on xq.weiduID = fy.fyXqCode --關聯得到小區名稱 left join tb_qx_weidu dh on dh.weiduID = fy.fyDhCode --關聯得到棟號名稱 left join tb_xngzf_basic_ht_child chd on ht.htID = chd.htID where 1=1 and ht.isPayMonenty = 2 and @affairsMonth between substring(replace(chd.startDate, '-', ''), 0, 7) and substring(replace(chd.endDate, '-', ''), 0, 7) and fy.fyXqCode = @fyXqCode and fy.fyDhCode = @fyDhCode )fo where fo.rowNumber = @i begin /**判斷扣租表裡該月份是否已扣租**/ if( not exists(select * from tb_xngzf_basic_money_deduct where [email protected] and affairsMonth=replace(@affairsMonth, '-', '')) ) begin /**查詢accountID**/ if(@chengzfID is not null) begin select @accountID=accountID from tb_xngzf_basic_money_account where chengzfID = @chengzfID end set @accountTotal = (select accountTotal from tb_xngzf_basic_money_account where accountID = @accountID) set @fyzjMonth = (select fyZujinMonth from tb_xngzf_basic_ht_child where htID = @htID) --set @accountTotal = 50 --set @fyzjMonth = 100 if(@accountTotal>[email protected]) begin begin tran --print @htID + ',' + @chengzfID + ',' + @fyID /**更新賬戶表的賬戶金額**/ update tb_xngzf_basic_money_account set [email protected], [email protected] where [email protected] if @@ERROR <> 0 begin rollback tran end /**插入賬戶子表一條扣費記錄**/ insert into tb_xngzf_basic_money_account_child(feeID, accountID, chengzfID, szType, income, expenses, accountTotal, scDesc, lastTime, lastPerson, lastGov) values((select MAX(CONVERT(bigint, feeID)+1) from tb_xngzf_basic_money_account_child), @accountID, @chengzfID, 4, 0, @fyzjMonth, @[email protected], '日常扣租', (select convert(nvarchar,getdate(),23)), @lastPerson, @lastGov) if @@ERROR <> 0 begin rollback tran end /**插入扣租表一條扣租記錄**/ insert into tb_xngzf_basic_money_deduct(kfID, htID, fyID, chengzfID, affairsMonth, sfMoney, sfDesc, lastTime, lastPerson, lastGov) values((select MAX(CONVERT(bigint, kfID)+1) from tb_xngzf_basic_money_deduct), @htID, @fyID, @chengzfID, replace(@affairsMonth, '-', ''), @fyzjMonth, '來自扣租', (select convert(nvarchar,getdate(),23)), @lastPerson, @lastGov) if @@ERROR <> 0 begin rollback tran end commit tran end else begin --插入臨時表一條記錄 insert into Du_ErrorInfo(htCode, chengzfName, fyName, accountID, accountTotal, fyzjMonth, resultInfo) values(@htCode, @chengzfName, @fyName, @accountID, @accountTotal, @fyzjMonth, '賬戶餘額不足') end end set @[email protected]+1 end end --查詢臨時表記錄 select due.htCode, due.chengzfName, due.fyName, due.accountID, due.accountTotal, due.fyzjMonth, due.resultInfo from Du_ErrorInfo due --刪除臨時表 drop table Du_ErrorInfo --調儲存過程 exec PROC_GzfRentMonthZj '77', '78', '2014-06', '1', ''
相關推薦
jdbc 呼叫 sql server 的儲存過程時“該語句沒有返回結果集”的解決方法
在JDBC中呼叫SQL Server中的儲存過程時出現如下異常: com.microsoft.sqlserver.jdbc.SQLServerException: 該語句沒有返回結果集。 at com.microsoft.sqlserver
Yii2.0呼叫sql server儲存過程並獲取返回值
1、首先展示建立sql server儲存過程的語句,建立一個簡單的儲存過程,測試用。 1 SET ANSI_NULLS ON 2 GO 3 SET QUOTED_IDENTIFIER ON 4 GO 5 6 CREATE PROCEDURE [dbo].[register_info]
Excel使用ADO呼叫SQL Server儲存過程
測試環境:SQL Server 2014,Excel 2013前期在做一個現場投票的小軟體,準備使用Excel實現,工作簿中包含有兩個工作表,各包含一個命令按鈕,分別用於提交和檢視投票結果。問題出在檢視投票按鈕上,起初只是使用SELECT語句查詢,一切正常;後期對於投票結果需
oracle儲存過程傳入in引數,返回結果集
create or replace procedure proc_report_TEST(zhxshss in varchar2, pcursor out sys_refcursor) as begi
SQL Server儲存過程中top後為變數時的處理
@pageRecordNum為每頁顯示的記錄數,@currentPageNum為當前的頁數 create proc pagination @pageRecordNum int,@currentPageNum int as declare @recNum varchar(
Sql Server 儲存過程呼叫儲存過程接收輸出引數,返回值
CREATE PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[
sql server儲存過程迴圈呼叫
ALTER PROCEDURE [dbo].[OMS_DISCOUNT_SHARING_PRO] @lypt AS VARCHAR(10) AS DECLARE @orderStatus VARCHAR(10); DECLARE @orderlypt VARCHAR(
SQL Server 儲存過程中處理多個查詢條件的幾種常見寫法分析,我們該用那種寫法
最近發現還有不少做開發的小夥伴,在寫儲存過程的時候,在參考已有的不同的寫法時,往往很迷茫, 不知道各種寫法孰優孰劣,該選用那種寫法,以及各種寫法優缺點,本文以一個簡單的查詢儲存過程為例,簡單說一下各種寫法的區別,以及該用那種寫法 專業DBA以及熟悉資料庫的同學請無視。
SQL server 儲存過程的編寫
USE [資料庫名稱] GO /****** Object: StoredProcedure [dbo].[insertbGait] Script Date: 2018/7/17 15:51:22 ******/ SET ANSI_NULLS ON GO
SQL SERVER儲存過程加密和安全上下文
對SQL Server 2008的安全入門略作小結,以作備忘。本文涉及兩個應用:儲存過程加密和安全上下文。 <一>儲存過程加密 SQL server,我已經成了儲存過程的忠實擁躉。在直接使用SQL語句還是儲存過程來處理業務邏輯時,我基本會毫不猶豫地選擇後者。 理由如下:
SQL Server 儲存過程返回值的幾種方式
獲得儲存過程的返回值–通過查詢分析器獲得 (1)不帶任何引數的儲存過程(儲存過程語句中含有return) —建立儲存過程 CREATE PROCEDURE testReturn AS return 145 GO —執行儲存過程 DECLARE @RC int exec @RC=
SQL Server儲存過程的使用
儲存過程概述 簡單來說,儲存過程就是一條或者多條sql語句的集合,可視為批處理檔案,但是其作用不僅限於批處理。 基本概念: SQL Server中的儲存過程是使用T_SQL編寫的程式碼段。它的目的在於能夠方便的從系統表中查詢資訊, 或者完成與更新資料
SQL Server 儲存過程返回值彙總
獲得儲存過程的返回值–通過查詢分析器獲得 (1)不帶任何引數的儲存過程(儲存過程語句中含有return) —建立儲存過程 CREATE PROCEDURE testReturn AS return 145 GO —執行儲存過程 DECLARE @RC in
Sql Server 儲存過程 - 使用者操作例項
使用者的增刪改查 新增 --新增使用者 create procedure addDeviceUser @name nvarchar(36) , @phone nvarchar(36) , @password nvarchar(255) as begin if exists(
Sql server 儲存過程
-- ======================================= -- Author: <zengyongbin> -- Create date: <2018-11-11> -- Description: <新增> --
關於SQL SERVER 儲存過程使用(2)
現在有一場景,需要調用出公司員工在本週的請假天數。程式碼如下(1),本人一開始寫的時候用遍歷裡面套著一個遍歷,發現效果出不來如下(2),求是否有什麼方法可以實現遍歷裡面還有個遍歷。 SQL程式碼(1): --建立儲存過程 create procedure LeaveT
無意中發現的sql server 儲存過程加密破解方法
轉自:https://blog.csdn.net/gatr/article/details/51226122 儲存過程是資料庫中一個非常重要的該部分,很多業務邏輯都可能寫在儲存過程裡面,為了安全,部分儲存過程是加密存放的,如果我們想看到原始碼,就非常困難了,在sql se
SQL SERVER儲存過程批量插入資料庫表資料
CREATEPROCEDURE add_UserInfoASDECLARE@userCodeVARCHAR(30)DECLARE@userNameVARCHAR(30)DECLARE@userCode_baseVARCHAR(30)DECLARE@countINTEGERDECLARE@indexINTEGE
SQL server 儲存過程的建立並使用
什麼是儲存過程呢? 儲存過程就是作為可執行物件存放在資料庫中的一個或多個SQL命令。 通俗來講:儲存過程其實就是能完成一定操作的一組SQL語句。 那為什麼要用儲存過程呢? 1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般SQL語句每執行一
Sql Server儲存過程從一個表中抓取資料填充到另一張表中
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================================= -- Author: <alex,,Name> -- Create