2013-10-05 81 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.現在這讓我感到困惑。 –