Scope_Identity未按预期返回

时间:2013-10-05 13:53:33

标签: sql vb.net entity-framework sql-server-2012

使用entity Framework,vb和sql server。

我有一个存储过程(如下所示)插入一条新记录并返回相关记录的新标识(id列是一个正确定义的标识列)。存储过程将导入到我的实体数据模型中并作为函数调用,预期结果是新记录的标识。但是我总是得到0返回。

如果我在ssms中执行存储过程,我会在结果窗口中得到我期望的结果,并且还得到一个值为0的单独结果(这显然是返回到我的映射存储过程的内容)。

我的存储过程中有错误,或者我调用函数的方式有问题(也如下所示)。对于您可能提供的任何建议,我将非常感激。

存储过程:

ALTER PROCEDURE [Finances].[CreatePurchaseInvoicePayment]
-- Add the parameters for the stored procedure here
@PurchaseInvoiceId int = NULL,
@SupplierId int = NULL,
@PurchaseInvoicePaymentDate date = NULL,
@Amount money = NULL,
@PaymentType int = NULL,
@ChequeNumber nchar(10) = NULL,
@BankAccountId int = NULL,
@purchaseInvoiceCreditNoteId int = NULL,
@ConversionFactor numeric(4,2) = NULL,
@ModifiedDate date = NULL,
@id int = NULL OUTPUT 
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO Finances.PurchaseInvoicePayments
VALUES
(
@PurchaseInvoiceId,
@SupplierId,
@PurchaseInvoicePaymentDate,
@Amount,
@PaymentType,
@ChequeNumber,
@BankAccountId,
@purchaseInvoiceCreditNoteId,
@ConversionFactor,
@ModifiedDate
)
SET @id =  SCOPE_IDENTITY() 
END

这样被称为:

Try
                pipId = CInt(te.CreatePurchaseInvoicePayment(pip.PurchaseInvoiceId, pip.SupplierId, pip.PurchaseInvoicePaymentDate, pip.Amount, pip.PaymentType, pip.ChequeNumber, pip.BankAccountId, pip.PurchaseInvoiceCreditNoteId, pip.ConversionFactor, pip.ModifiedDate,nothing).FirstOrDefault)
            Catch ex As Exception

正如我所说,如果有人能指出我正确的方向,我将非常感激。

1 个答案:

答案 0 :(得分:0)

我相信函数需要来自SP的实际结果集。在这种情况下,您不需要输出参数,只需在SP的末尾添加:

SELECT SCOPE_IDENTITY()

并且该函数应该正确读取它。

相关问题