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
正如我說,如果任何人都可以在正確的方向指向我,我將感激不盡。
尤里,結果是一樣的,如果我只是選擇Scope_Identity。存儲過程返回標識(我想要的位)和返回值0,這是函數總是可以提取的位,以及一個我不想要的位。 –
好吧,它似乎選擇了返回值。你可以嘗試在最後而不是'SELECT SCOPE_IDENTITY()'做一個'RETURN SCOPE_IDENTITY()'? –
嗨尤里。我修改了程序,聲明瞭一個變量id作爲int,並在末尾設置了Scope_Identity,後面跟着Return id。現在,sproc只返回一個東西(身份),但有趣的是,當從函數調用它時,它仍然返回0.現在這讓我感到困惑。 –