2013-10-05 85 views
0

使用实体框架,vb和sql server。Scope_Identity未按预期返回

我有一个存储过程(如下所示)插入一条新记录并返回相关记录的新标识(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 

正如我说,如果任何人都可以在正确的方向指向我,我将感激不尽。

回答

0

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

SELECT SCOPE_IDENTITY() 

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

+0

尤里,结果是一样的,如果我只是选择Scope_Identity。存储过程返回标识(我想要的位)和返回值0,这是函数总是可以提取的位,以及一个我不想要的位。 –

+0

好吧,它似乎选择了返回值。你可以尝试在最后而不是'SELECT SCOPE_IDENTITY()'做一个'RETURN SCOPE_IDENTITY()'? –

+0

嗨尤里。我修改了程序,声明了一个变量id作为int,并在末尾设置了Scope_Identity,后面跟着Return id。现在,sproc只返回一个东西(身份),但有趣的是,当从函数调用它时,它仍然返回0.现在这让我感到困惑。 –