[SQL] 어떻게 테이블 데이터를 반환, 자바 / JSP에서 MS SQL Server 저장 프로 시저를 실행합니까?
SQL어떻게 테이블 데이터를 반환, 자바 / JSP에서 MS SQL Server 저장 프로 시저를 실행합니까?
나는 자바 / JSP에서 MS SQL Server 저장 프로 시저를 실행하는 데 문제가 있어요. 나는 데이터의 테이블 집합을 반환 할; 저장 프로 시저의 마지막 행은 테이블에서 일반 선택 문입니다.
(이러한 관점에서, 저장 프로 시저를 실행하는 PHP에서 순조롭게이다.)
나는 도움이 사이트를 살펴했다 : www.2netave.com www.stackoverflow.com
내가 대신 ()의 createStatement를 사용하고 있었던 나는이 함수는 단지 저장 프로 시저있다 몰랐어요.
이제 SQL Server 관리 Studio에서 완벽하게 저장 프로 시저가 실행을 이해하고 내가 실행에는 문제가 없었다 제발 임시 쿼리에서 JSP /의 createStatement와 자바 ().
난 그냥 문제를 좁힐, 인수를 취하지 않는 간단한 저장 프로 시저를 만들었습니다 :
CREATE PROCEDURE sp_test AS
BEGIN
PRINT 'HELLO WORLD'
END
여기 내 JSP 페이지의 코드는 다음과 같습니다
Class.forName("net.sourceforge.jtds.jdbc.Driver");
java.sql.Connection conn = java.sql.DriverManager.getConnection("jdbc:jtds:sqlserver://MySQLServer:1433/test", "user", "pass");
java.sql.CallableStatement cs = conn.prepareCall("{call sp_test}");
java.sql.ResultSet ResultSet = cs.execute();
브라우저는 내부 서버 오류가 발생하여 페이지를 표시 할 수 없습니다 내게 말하고있다. 나는 위의 코드에 문제가이 수단이 알고있다.
나는이 시도 :
java.sql.ResultSet ResultSet = cs.executeQuery();
이:
java.sql.CallableStatement cs = conn.prepareCall("{execute sp_test}");
이:
java.sql.CallableStatement cs = conn.prepareCall("{exec sp_test}");
그리고 아무 일 없습니다. 나는이 작업을 얻을 수있게되면, 그때는 실제 저장 프로 시저를 실행할 수 SELECT 문에서 반환 테이블 데이터. 하지만 난 일이 더미 저장 프로 시저를 얻을 수 없습니다.
어떻게 내가 여기 잘못 한거야?
감사합니다.
최신 정보:
서버 로그 (IIS) 내 HTTP 프록시, 피들러를 검사하고, 아무것도보고하지 않습니다. 그러나, IIS는 JSP 페이지의 서블릿 엔진으로 Tomcat을 사용하고 있습니다. 그리고 로그 파일 바람둥이 다음을보고 :
An error occurred at line: 20 in the jsp file: /test.jsp
Type mismatch: cannot convert from boolean to ResultSet
17:
18: java.sql.CallableStatement cs = conn.prepareCall("{call sp_test}");
19:
20: java.sql.ResultSet ResultSet = cs.execute();
21:
22: // java.sql.ResultSet ResultSet = state.executeQuery(SQL);
23:
나는 위의 변경 시도 :
cs.execute();
그리고 로그 파일을보고 :
- Servlet.service() for servlet jsp threw exception
java.sql.SQLException: The EXECUTE permission was denied on the object 'sp_test', database 'test', schema 'dbo'.
그래서, 나는 사용자 실행을 부여해야 알아 낸. 또 다른 문제는 저장 프로 시저에서 테이블 데이터를 반환합니다.
나는이 같은 절차가있는 경우 :
CREATE PROCEDURE sp_test2 AS
BEGIN
SELECT * FROM TABLE
END
어떻게 JSP의 테이블 데이터를 조작 하는가? 겠습니까 ResultSet의 작업 또는 단지 임시 쿼리, 저장 프로 시저에 반대를 들어, 하나의 createStatement ()는 쿼리를 실행하는 데 사용하는 곳입니까?
감사합니다.
갱신 2 :
해결책:
테이블 데이터를 조작하기 위해, 나는 이것을 사용했다 :
java.sql.ResultSet RS = cs.executeQuery();
그것은에 실행 실패 ()과는 ResultSet 객체 "결과 집합"이름에 실패했습니다. 그것은의 createStatement와 과거에 이것에 대해 불평하지 않았 (). 그러나 저장 프로 시저 몇 가지 이유에 대해,이 이름 지정 규칙을 좋아하지 않았다.
감사합니다.
해결법
-
==============================
1.: SQL 서버 2000 및 2008 모두에서 작동 -과 같이 우리의 서버 호출은 자바에서 발동 저장
: SQL 서버 2000 및 2008 모두에서 작동 -과 같이 우리의 서버 호출은 자바에서 발동 저장
String SPsql = "EXEC <sp_name> ?,?"; // for stored proc taking 2 parameters Connection con = SmartPoolFactory.getConnection(); // java.sql.Connection PreparedStatement ps = con.prepareStatement(SPsql); ps.setEscapeProcessing(true); ps.setQueryTimeout(<timeout value>); ps.setString(1, <param1>); ps.setString(2, <param2>); ResultSet rs = ps.executeQuery();
-
==============================
2.코드에 대한 브라이언에 감사드립니다. 나는 {전화 spname (?,?)}와 SQL 서버에 연결을 시도하고 있었고, 난 오류를 가지고,하지만 난 간부 인 SP에 코드를 변경하면 ... 그것은 매우 잘 작동합니다.
코드에 대한 브라이언에 감사드립니다. 나는 {전화 spname (?,?)}와 SQL 서버에 연결을 시도하고 있었고, 난 오류를 가지고,하지만 난 간부 인 SP에 코드를 변경하면 ... 그것은 매우 잘 작동합니다.
나는 희망 내 코드이 내 같은 문제로 다른 사람을 도움이 게시 :
ResultSet rs = null; PreparedStatement cs=null; Connection conn=getJNDIConnection(); try { cs=conn.prepareStatement("exec sp_name ?,?,?,?,?,?,?"); cs.setEscapeProcessing(true); cs.setQueryTimeout(90); cs.setString(1, "valueA"); cs.setString(2, "valueB"); cs.setString(3, "0418"); //commented, because no need to register parameters out!, I got results from the resultset. //cs.registerOutParameter(1, Types.VARCHAR); //cs.registerOutParameter(2, Types.VARCHAR); rs = cs.executeQuery(); ArrayList<ObjectX> listaObjectX = new ArrayList<ObjectX>(); while (rs.next()) { ObjectX to = new ObjectX(); to.setFecha(rs.getString(1)); to.setRefId(rs.getString(2)); to.setRefNombre(rs.getString(3)); to.setUrl(rs.getString(4)); listaObjectX.add(to); } return listaObjectX; } catch (SQLException se) { System.out.println("Error al ejecutar SQL"+ se.getMessage()); se.printStackTrace(); throw new IllegalArgumentException("Error al ejecutar SQL: " + se.getMessage()); } finally { try { rs.close(); cs.close(); con.close(); } catch (SQLException ex) { ex.printStackTrace(); } }
-
==============================
3.자주 우리는 이러한 저장 프로 시저를 만드는 다른 동료 자바 프로그래머의 작업을 처리합니다. 우리는 그것으로 주위를 엉망으로하지 않습니다. 하지만 당신은이 간부 샘플 리턴이 0 (거의 저장 프로 시저 호출이 제로를 반환) 결과 집합을받을 가능성이 있습니다.
자주 우리는 이러한 저장 프로 시저를 만드는 다른 동료 자바 프로그래머의 작업을 처리합니다. 우리는 그것으로 주위를 엉망으로하지 않습니다. 하지만 당신은이 간부 샘플 리턴이 0 (거의 저장 프로 시저 호출이 제로를 반환) 결과 집합을받을 가능성이 있습니다.
이 샘플을 확인 :
public void generateINOUT(String USER, int DPTID){ try { conUrl = JdbcUrls + dbServers +";databaseName="+ dbSrcNames+";instance=MSSQLSERVER"; con = DriverManager.getConnection(conUrl,dbUserNames,dbPasswords); //stat = con.createStatement(); con.setAutoCommit(false); Statement st = con.createStatement(); st.executeUpdate("DECLARE @RC int\n" + "DECLARE @pUserID nvarchar(50)\n" + "DECLARE @pDepartmentID int\n" + "DECLARE @pStartDateTime datetime\n" + "DECLARE @pEndDateTime datetime\n" + "EXECUTE [AccessManager].[dbo].[SP_GenerateInOutDetailReportSimple] \n" + ""+USER + "," +DPTID+ ",'"+STARTDATE + "','"+ENDDATE+"'"); ResultSet rs = st.getGeneratedKeys(); while (rs.next()){ String userID = rs.getString("UserID"); Timestamp timeIN = rs.getTimestamp("timeIN"); Timestamp timeOUT = rs.getTimestamp ("timeOUT"); int totTime = rs.getInt ("totalTime"); int pivot = rs.getInt ("pivotvalue"); timeINS = sdz.format(timeIN); userIN.add(timeINS); timeOUTS = sdz.format(timeOUT); userOUT.add(timeOUTS); System.out.println("User : "+userID+" |IN : "+timeIN+" |OUT : "+timeOUT+"| Total Time : "+totTime+" | PivotValue : "+pivot); } con.commit(); }catch (Exception e) { e.printStackTrace(); System.out.println(e); if (e.getCause() != null) { e.getCause().printStackTrace();} } }
나는 며칠 시행 착오 후이 솔루션에 와서 인터넷 검색과 혼동 얻을;) 이 저장 프로 시저 아래 실행 :
USE [AccessManager] GO /****** Object: StoredProcedure [dbo].[SP_GenerateInOutDetailReportSimple] Script Date: 04/05/2013 15:54:11 ******/ SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[SP_GenerateInOutDetailReportSimple] ( @pUserID nvarchar(50), @pDepartmentID int, @pStartDateTime datetime, @pEndDateTime datetime ) AS Declare @ErrorCode int Select @ErrorCode = @@Error Declare @TransactionCountOnEntry int If @ErrorCode = 0 Begin Select @TransactionCountOnEntry = @@TranCount BEGIN TRANSACTION End If @ErrorCode = 0 Begin -- Create table variable instead of SQL temp table because report wont pick up the temp table DECLARE @tempInOutDetailReport TABLE ( UserID nvarchar(50), LogDate datetime, LogDay varchar(20), TimeIN datetime, TimeOUT datetime, TotalTime int, RemarkTimeIn nvarchar(100), RemarkTimeOut nvarchar(100), TerminalIPTimeIn varchar(50), TerminalIPTimeOut varchar(50), TerminalSNTimeIn nvarchar(50), TerminalSNTimeOut nvarchar(50), PivotValue int ) -- Declare variables for the while loop Declare @LogUserID nvarchar(50) Declare @LogEventID nvarchar(50) Declare @LogTerminalSN nvarchar(50) Declare @LogTerminalIP nvarchar(50) Declare @LogRemark nvarchar(50) Declare @LogTimestamp datetime Declare @LogDay nvarchar(20) -- Filter off userID, departmentID, StartDate and EndDate if specified, only process the remaining logs -- Note: order by user then timestamp Declare LogCursor Cursor For Select distinct access_event_logs.USERID, access_event_logs.EVENTID, access_event_logs.TERMINALSN, access_event_logs.TERMINALIP, access_event_logs.REMARKS, access_event_logs.LOCALTIMESTAMP, Datename(dw,access_event_logs.LOCALTIMESTAMP) AS WkDay From access_event_logs Left Join access_user on access_user.User_ID = access_event_logs.USERID Left Join access_user_dept on access_user.User_ID = access_user_dept.User_ID Where ((Dept_ID = @pDepartmentID) OR (@pDepartmentID IS NULL)) And ((access_event_logs.USERID LIKE '%' + @pUserID + '%') OR (@pUserID IS NULL)) And ((access_event_logs.LOCALTIMESTAMP >= @pStartDateTime ) OR (@pStartDateTime IS NULL)) And ((access_event_logs.LOCALTIMESTAMP < DATEADD(day, 1, @pEndDateTime) ) OR (@pEndDateTime IS NULL)) And (access_event_logs.USERID != 'UNKNOWN USER') -- Ignore UNKNOWN USER Order by access_event_logs.USERID, access_event_logs.LOCALTIMESTAMP Open LogCursor Fetch Next From LogCursor Into @LogUserID, @LogEventID, @LogTerminalSN, @LogTerminalIP, @LogRemark, @LogTimestamp, @LogDay -- Temp storage for IN event details Declare @InEventUserID nvarchar(50) Declare @InEventDay nvarchar(20) Declare @InEventTimestamp datetime Declare @InEventRemark nvarchar(100) Declare @InEventTerminalIP nvarchar(50) Declare @InEventTerminalSN nvarchar(50) -- Temp storage for OUT event details Declare @OutEventUserID nvarchar(50) Declare @OutEventTimestamp datetime Declare @OutEventRemark nvarchar(100) Declare @OutEventTerminalIP nvarchar(50) Declare @OutEventTerminalSN nvarchar(50) Declare @CurrentUser varchar(50) -- used to indicate when we change user group Declare @CurrentDay varchar(50) -- used to indicate when we change day Declare @FirstEvent int -- indicate the first event we received Declare @ReceiveInEvent int -- indicate we have received an IN event Declare @PivotValue int -- everytime we change user or day - we reset it (reporting purpose), if same user..keep increment its value Declare @CurrTrigger varchar(50) -- used to keep track of the event of the current event log trigger it is handling Declare @CurrTotalHours int -- used to keep track of total hours of the day of the user Declare @FirstInEvent datetime Declare @FirstInRemark nvarchar(100) Declare @FirstInTerminalIP nvarchar(50) Declare @FirstInTerminalSN nvarchar(50) Declare @FirstRecord int -- indicate another day of same user Set @PivotValue = 0 -- initialised Set @CurrentUser = '' -- initialised Set @FirstEvent = 1 -- initialised Set @ReceiveInEvent = 0 -- initialised Set @CurrTrigger = '' -- Initialised Set @CurrTotalHours = 0 -- initialised Set @FirstRecord = 1 -- initialised Set @CurrentDay = '' -- initialised While @@FETCH_STATUS = 0 Begin -- use to track current log trigger Set @CurrTrigger =LOWER(@LogEventID) If (@CurrentUser != '' And @CurrentUser != @LogUserID) -- new batch of user Begin If @ReceiveInEvent = 1 -- previous IN event is not cleared (no OUT is found) Begin -- Check day If (@CurrentDay != @InEventDay) -- change to another day Set @PivotValue = 0 -- Reset Else -- same day Set @PivotValue = @PivotValue + 1 -- increment Set @CurrentDay = @InEventDay -- update the day -- invalid row (only has IN event) Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, RemarkTimeIn, TerminalIPTimeIn, TerminalSNTimeIn, PivotValue, LogDate ) values( @InEventUserID, @InEventDay, @InEventTimestamp, @InEventRemark, @InEventTerminalIP, @InEventTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp))) End Set @FirstEvent = 1 -- Reset flag (we are having a new user group) Set @ReceiveInEvent = 0 -- Reset Set @PivotValue = 0 -- Reset --Set @CurrentDay = '' -- Reset End If LOWER(@LogEventID) = 'in' -- IN event Begin If @ReceiveInEvent = 1 -- previous IN event is not cleared (no OUT is found) Begin -- Check day If (@CurrentDay != @InEventDay) -- change to another day Begin Set @PivotValue = 0 -- Reset --Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, TimeOUT, TotalTime, RemarkTimeIn, -- RemarkTimeOut, TerminalIPTimeIn, TerminalIPTimeOut, TerminalSNTimeIn, TerminalSNTimeOut, PivotValue, -- LogDate) --values( @LogUserID, @CurrentDay, @FirstInEvent, @LogTimestamp, @CurrTotalHours, -- @FirstInRemark, @LogRemark, @FirstInTerminalIP, @LogTerminalIP, @FirstInTerminalSN, @LogTerminalSN, @PivotValue, -- DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp))) End Else Set @PivotValue = @PivotValue + 1 -- increment Set @CurrentDay = @InEventDay -- update the day -- invalid row (only has IN event) Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, RemarkTimeIn, TerminalIPTimeIn, TerminalSNTimeIn, PivotValue, LogDate ) values( @InEventUserID, @InEventDay, @InEventTimestamp, @InEventRemark, @InEventTerminalIP, @InEventTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp))) End If((@CurrentDay != @LogDay And @CurrentDay != '') Or (@CurrentUser != @LogUserID And @CurrentUser != '') ) Begin Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, TimeOUT, TotalTime, RemarkTimeIn, RemarkTimeOut, TerminalIPTimeIn, TerminalIPTimeOut, TerminalSNTimeIn, TerminalSNTimeOut, PivotValue, LogDate) values( @CurrentUser, @CurrentDay, @FirstInEvent, @OutEventTimestamp, @CurrTotalHours, @FirstInRemark, @OutEventRemark, @FirstInTerminalIP, @OutEventTerminalIP, @FirstInTerminalSN, @LogTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp))) Set @FirstRecord = 1 End -- Save it Set @InEventUserID = @LogUserID Set @InEventDay = @LogDay Set @InEventTimestamp = @LogTimeStamp Set @InEventRemark = @LogRemark Set @InEventTerminalIP = @LogTerminalIP Set @InEventTerminalSN = @LogTerminalSN If (@FirstRecord = 1) -- save for first in event record of the day Begin Set @FirstInEvent = @LogTimestamp Set @FirstInRemark = @LogRemark Set @FirstInTerminalIP = @LogTerminalIP Set @FirstInTerminalSN = @LogTerminalSN Set @CurrTotalHours = 0 --initialise total hours for another day End Set @FirstRecord = 0 -- no more first record of the day Set @ReceiveInEvent = 1 -- indicate we have received an "IN" event Set @FirstEvent = 0 -- no more "first" event End Else If LOWER(@LogEventID) = 'out' -- OUT event Begin If @FirstEvent = 1 -- the first OUT record when change users Begin -- Check day If (@CurrentDay != @LogDay) -- change to another day Set @PivotValue = 0 -- Reset Else Set @PivotValue = @PivotValue + 1 -- increment Set @CurrentDay = @LogDay -- update the day -- Only an OUT event (no IN event) - invalid record but we show it anyway Insert into @tempInOutDetailReport( UserID, LogDay, TimeOUT, RemarkTimeOut, TerminalIPTimeOut, TerminalSNTimeOut, PivotValue, LogDate ) values( @LogUserID, @LogDay, @LogTimestamp, @LogRemark, @LogTerminalIP, @LogTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @LogTimestamp))) Set @FirstEvent = 0 -- not "first" anymore End Else -- Not first event Begin If @ReceiveInEvent = 1 -- if there are IN event previously Begin -- Check day If (@CurrentDay != @InEventDay) -- change to another day Set @PivotValue = 0 -- Reset Else Set @PivotValue = @PivotValue + 1 -- increment Set @CurrentDay = @InEventDay -- update the day Set @CurrTotalHours = @CurrTotalHours + DATEDIFF(second,@InEventTimestamp, @LogTimeStamp) -- update total time Set @OutEventRemark = @LogRemark Set @OutEventTerminalIP = @LogTerminalIP Set @OutEventTerminalSN = @LogTerminalSN Set @OutEventTimestamp = @LogTimestamp -- valid row --Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, TimeOUT, TotalTime, RemarkTimeIn, -- RemarkTimeOut, TerminalIPTimeIn, TerminalIPTimeOut, TerminalSNTimeIn, TerminalSNTimeOut, PivotValue, -- LogDate) --values( @LogUserID, @InEventDay, @InEventTimestamp, @LogTimestamp, Datediff(second, @InEventTimestamp, @LogTimeStamp), -- @InEventRemark, @LogRemark, @InEventTerminalIP, @LogTerminalIP, @InEventTerminalSN, @LogTerminalSN, @PivotValue, -- DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp))) Set @ReceiveInEvent = 0 -- Reset End Else -- no IN event previously Begin -- Check day If (@CurrentDay != @LogDay) -- change to another day Set @PivotValue = 0 -- Reset Else Set @PivotValue = @PivotValue + 1 -- increment Set @CurrentDay = @LogDay -- update the day -- invalid row (only has OUT event) Insert into @tempInOutDetailReport( UserID, LogDay, TimeOUT, RemarkTimeOut, TerminalIPTimeOut, TerminalSNTimeOut, PivotValue, LogDate ) values( @LogUserID, @LogDay, @LogTimestamp, @LogRemark, @LogTerminalIP, @LogTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @LogTimestamp)) ) End End End Set @CurrentUser = @LogUserID -- update user Fetch Next From LogCursor Into @LogUserID, @LogEventID, @LogTerminalSN, @LogTerminalIP, @LogRemark, @LogTimestamp, @LogDay End -- Need to handle the last log if its IN log as it will not be processed by the while loop if @CurrTrigger='in' Begin -- Check day If (@CurrentDay != @InEventDay) -- change to another day Set @PivotValue = 0 -- Reset Else -- same day Set @PivotValue = @PivotValue + 1 -- increment Set @CurrentDay = @InEventDay -- update the day -- invalid row (only has IN event) Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, RemarkTimeIn, TerminalIPTimeIn, TerminalSNTimeIn, PivotValue, LogDate ) values( @InEventUserID, @InEventDay, @InEventTimestamp, @InEventRemark, @InEventTerminalIP, @InEventTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp))) End else if @CurrTrigger = 'out' Begin Insert into @tempInOutDetailReport( UserID, LogDay, TimeIN, TimeOUT, TotalTime, RemarkTimeIn, RemarkTimeOut, TerminalIPTimeIn, TerminalIPTimeOut, TerminalSNTimeIn, TerminalSNTimeOut, PivotValue, LogDate) values( @LogUserID, @CurrentDay, @FirstInEvent, @LogTimestamp, @CurrTotalHours, @FirstInRemark, @LogRemark, @FirstInTerminalIP, @LogTerminalIP, @FirstInTerminalSN, @LogTerminalSN, @PivotValue, DATEADD(HOUR, 0, DATEDIFF(DAY, 0, @InEventTimestamp))) End Close LogCursor Deallocate LogCursor Select * From @tempInOutDetailReport tempTable Left Join access_user on access_user.User_ID = tempTable.UserID Order By tempTable.UserID, LogDate End If @@TranCount > @TransactionCountOnEntry Begin If @ErrorCode = 0 COMMIT TRANSACTION Else ROLLBACK TRANSACTION End return @ErrorCode
당신은 당신의 데이터베이스에 저장 프로 시저에 마우스 오른쪽 버튼을 클릭하여 "자바 SQL 코드"를 얻을 것이다. 이 같은 :
DECLARE @RC int DECLARE @pUserID nvarchar(50) DECLARE @pDepartmentID int DECLARE @pStartDateTime datetime DECLARE @pEndDateTime datetime -- TODO: Set parameter values here. EXECUTE @RC = [AccessManager].[dbo].[SP_GenerateInOutDetailReportSimple] @pUserID,@pDepartmentID,@pStartDateTime,@pEndDateTime GO
문자열 내가했던 쿼리를 확인, 그 숙제입니다;) 미안 긴이 응답, 내가 대답을 얻기 위해 몇 주 전에 등록 이후이 내 첫 번째 대답이다.
-
==============================
4.FWIW는 sp_test 아무것도하지만, 정수 (모든 SQL Server 저장 발동 그냥 정수를 반환) 및 (NO SELECT 문부터) 전선에 아무런 결과 집합을 반환하지 않습니다. 인쇄 문의 출력을 얻으려면, 당신은 일반적으로 ADO.NET에서 연결 (안 명령)에 InfoMessage 이벤트를 사용합니다.
FWIW는 sp_test 아무것도하지만, 정수 (모든 SQL Server 저장 발동 그냥 정수를 반환) 및 (NO SELECT 문부터) 전선에 아무런 결과 집합을 반환하지 않습니다. 인쇄 문의 출력을 얻으려면, 당신은 일반적으로 ADO.NET에서 연결 (안 명령)에 InfoMessage 이벤트를 사용합니다.
from https://stackoverflow.com/questions/6113674/how-do-i-execute-a-ms-sql-server-stored-procedure-in-java-jsp-returning-table-d by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 번호 또는 간격 데이터 유형 - 오라클의 날짜를 빼면? (0) | 2020.06.06 |
---|---|
[SQL] (WHERE) 조건으로 선택된 행에서 이전 및 다음 행을 가져옵니다 (0) | 2020.06.06 |
[SQL] "NOT IN"사용하여 SQL 쿼리 LINQ (0) | 2020.06.06 |
[SQL] SQL 쿼리와 기능 결과 데이터에 대한 대상이 없습니다 (0) | 2020.06.06 |
[SQL] `alias` ...`alias`.`column` ... 왜 구문 오류 AS table``에서 삭제? (0) | 2020.06.06 |