2013-10-05 3 views
0

엔티티 Framework, VB 및 SQL Server를 사용합니다.Scope_Identity가 예상대로 반환되지 않습니다.

새 레코드를 삽입하고 관련 레코드의 새 ID를 반환하는 저장 프로 시저 (아래 참조)가 있습니다 (id 열은 올바르게 정의 된 ID 열임). 저장 프로시 저는 내 엔터티 데이터 모델로 가져오고 새 레코드의 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

Yuriy, Scope_Identity를 선택하면 결과가 동일합니다. 스토어드 프로 시저는 ID (원하는 비트)와 리턴 값인 0을 리턴합니다.이 비트는 함수가 항상 선택하는 것으로 보이며, 원하지 않는 비트입니다. –

+0

좋아, 반환 값을 선택하는 것 같습니다. 당신은'SELECT SCOPE_IDENTITY()'대신'RETURN SCOPE_IDENTITY()'를 끝내시겠습니까? –

+0

안녕하세요. 프로 시저를 수정하여 변수 ID를 int로 선언하고 그 값을 끝에있는 Scope_Identity, 리턴 ID 순으로 설정했습니다. sproc은 이제 단 하나의 것을 반환합니다 (신원). 그러나 흥미롭게도 함수에서 호출되면 여전히 0을 반환합니다. 이제는 혼란 스럽습니다. –

관련 문제