【问题标题】:insert into table using MS sql rocedure and return status message fails in mssql 2008 r2. returns exception procedure is a table valued function在 mssql 2008 r2 中使用 MS sql 过程插入表并返回状态消息失败。返回异常过程是表值函数
【发布时间】:2015-01-31 20:14:45
【问题描述】:

我在 sql server 2008 R2 中有以下过程 MSSQL 过程

/****** Object:  UserDefinedFunction [dbo].[test_fn_transaction_search]    Script Date: 01/30/2015 11:57:44 ******/
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


GO

我在 Java 中使用它,如下所示

Java Dao 方法

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_selected ?,?,?,?"); 
            pstmt = connect.prepareStatement(SQL);
            pstmt.setString(1, a);
            pstmt.setString(2, b);
            pstmt.setString(3, c);
            pstmt.setString(4, d);
            rs = pstmt.executeQuery();
        }
        catch (Exception e2)
        {
            e2.printStackTrace();
            return "fail";
        }
        //ArrayList<Transactions> list=getrowFromResultSet2(rs);

        return "success";
    }

我得到以下异常。谁能告诉我出了什么问题。

我在网上阅读了以下有关 MSSQL 的内容,这引起了很多混乱。

a) 函数不能用于将值插入到临时表以外的表中。 b) 过程不能返回表值。

那么如何才能做到以下三个 a) 将 3 个参数发送到函数/过程 b) 使用输入参数作为 select 语句的输入, c) 将返回值插入到表中, d)返回插入的行/成功/失败状态。

截至目前,我得到以下异常

com.microsoft.sqlserver.jdbc.SQLServerException: The request for procedure 'test_fn_transaction_selected' failed because 'test_fn_transaction_selected' is a table valued function object.

【问题讨论】:

  • 您尚未发布 test_fn_transaction_seleted 的代码,但我们可以从错误中看出它是 TVF。您是否打算执行存储过程 test_fn_transaction_insert_log?
  • 您的过程称为 test_fn_transaction_insert_log,但您正在执行 test_fn_transaction_selected

标签: java sql-server tsql stored-procedures mssql-jdbc


【解决方案1】:

我认为您需要检查自己的代码,您在标题处的注释是针对函数的,您正在更改 SP 并且错误消息是关于函数的。你确定你问的是正确的问题吗?

【讨论】:

    猜你喜欢
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2014-12-05
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多