В первую очередь я разработчик Java с некоторым опытом работы с Oracle DB. Мне приходится использовать MSSQL server 2008 R2 для одного проекта. Я прошел краткое руководство по серверу mssql на udemy и начал создавать функции и процедуры.
Проблема тройная,
а) мне нужно передать несколько значений процедуре или функции, вставить их в таблицу и вернуться.
я читал в Интернете, что функции нельзя использовать для вставки в существующие таблицы ... скорее, они вставляют только во временные таблицы ... это правда? вы не можете вставить в таблицу и вернуть строку, вставленную в функцию на сервере MSSQL? В любом случае я использовал описанную ниже процедуру.
USE [KingsBayY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter PROCEDURE test_fn_transaction_insert_log @receipt varchar(25), @amount varchar(25), @stdt varchar(25),
@enddt varchar(25)
AS
SET NOCOUNT ON
INSERT INTO [TransactionLog] ( TimeStamp, CashierID, Total,RecurringStartDate,
RecurringStopDate, CustomerID, ReceiptNumber, Voided, Attendee, ItemLookupCode)
SELECT CURRENT_TIMESTAMP AS [TimeStamp], tr.CashierID, @amount, @stdt,@enddt,c.ID,tr.ReceiptNumber,
tr.Voided,it.ItemLookupCode, tr.Comment
from [Transaction] tr, TransactionEntry trent, Item it, Customer c
where trent.TransactionID = tr.ID
and trent.ItemID = it.ID
and c.ID=tr.CustomerID
and tr.ReceiptNumber=@receipt
--condition to ensure no duplicates are entered and [TransactionLog].ID not in (select ID from [TransactionLog] where [TransactionLog].ID=tr.ID)
GO
На данный момент, когда я пытаюсь вызвать эту процедуру на Java, как показано ниже, она выдает исключение
public String saveTr(String a, String b, String c, String d) {
try
{
SqlServerConn conn = new SqlServerConn();
connect=conn.getConnection();
String SQL = String.format("Exec test_fn_transaction_insert_log ?,?,?,?");
pstmt = connect.prepareStatement(SQL);
pstmt.setString(1, a);
pstmt.setString(2, b);
pstmt.setString(3, c);
pstmt.setString(4, d);
pstmt.executeQuery();
}
catch (Exception e2)
{
e2.printStackTrace();
return "fail";
}
//ArrayList<Transactions> list=getrowFromResultSet2(rs);
return "success";
}
я получаю это исключение:
com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
б) в приведенной выше процедуре мне нужно вернуть только что вставленную строку. Как я могу это сделать? или хотя бы получить код возврата?
c) это даже лучший способ написать эту процедуру для требования? можно ли использовать функции?