2014-10-16 4 views
0

단일 저장 프로 시저에 두 개의 쿼리가 있습니다. TVP를 두 쿼리에 모두 사용하는 하나의 테이블 테이블 값 매개 변수 &이 있습니다. 내 쿼리 중 하나가 정상적으로 작동합니다 (업데이트 쿼리가 정상적으로 작동합니다). 삽입 쿼리에 동일한 TVP를 사용하고 있으면 값을 삽입하지 않습니다. 나는 어떤 일이 일어나고 있는지 모른다. & 또한 오류가 오지 않는다.SQL에서 쿼리의 테이블 반환 값 매개 변수에 액세스 할 수 없습니다

CREATE TYPE Mapping_n_Info_Master_Type AS TABLE 
(
    quantity INT, 
    product_id INT, 
    sell_order_no VARCHAR(20), 
    selling_product_id VARCHAR(20), 
    tax_id INT 
); 
GO 

CREATE PROC spInsert_Rs_Sell_Order_Master 
(
    @tvp_Mapping_n_Info_Master Mapping_n_Info_Master_Type READONLY 
) 
AS 
BEGIN 

    SET NOCOUNT ON 
    BEGIN TRY 
    BEGIN TRANSACTION 

     --Start This Part is not Working 
     INSERT INTO 
      RS_Sells_Invoice_Info_Master 
     SELECT 
      sell_order_no,product_id,selling_product_id,tax_id,qty 
     FROM 
      @tvp_Mapping_n_Info_Master 

     --End This Part is not Working 


     --Insert Logic For Sell Order Mapping 
     UPDATE 
      RS_Sell_Order_Mapping 
     SET 
      quantity = TVP.quantity  
     FROM 
      @tvp_Mapping_n_Info_Master tvp 
      INNER JOIN RS_Sell_Order_Mapping AS SOM ON 
      TVP.product_id = SOM.product_id AND TVP.sell_order_no = SOM.sell_order_no 
     WHERE 
      SOM.product_id = TVP.product_id 
       AND 
      SOM.sell_order_no = TVP.sell_order_no 

    COMMIT TRANSACTION 

    END TRY 

    BEGIN CATCH 

     DECLARE @ERROR_MSG NVARCHAR(MAX), @SEVERITY INT, @STATE INT 
     SELECT @SEVERITY = ERROR_SEVERITY(), @STATE = ERROR_STATE() 
     ,@ERROR_MSG = ERROR_MESSAGE() + ' err src line: ' + CAST(ERROR_LINE() AS NVARCHAR(20)) + ' ' + ISNULL(ERROR_PROCEDURE(), '');   
     [email protected]_MSG = ERROR_MESSAGE() 
     ROLLBACK; 
     -- RE-THROW EXCEPTION FOR DIAGNOSTIC VISIBILITY 
     RAISERROR (@ERROR_MSG ,@SEVERITY, @STATE);   
     RETURN 

    END CATCH 
END 

내 테이블이 enter image description here

처럼 보이는 내가 삽입 쿼리에 제공 한 매개 변수의 순서를 변경 하시겠습니까 :

여기 내 쿼리입니다. 등이

+2

. 나는 그것이 문제일지도 모른다라고 생각한다. TVP에서 수량을 정의하고 삽입 쿼리에서 수량을 사용하고 있습니다. –

+0

감사합니다. Krishnaraj 당신의 도움을 위해 ..... !!!! –

+0

이 TAble 유형을 사용해야하는 이유와 테이블 유형이 무엇인지 말해 주실 수 있습니까 –

답변

1

쓰기에 당신의 제안을하십시오 : 당신은 ** 수량 ** 대신 삽입 쿼리 ** 양 **의 사용했다

INSERT INTO 
RS_Sells_Invoice_Info_Master (sell_order_no, 
           product_id, 
           selling_product_id, 
           tax_id, 
           qty) 
SELECT MIM.sell_order_no, 
     MIM.product_id, 
     MIM.selling_product_id, 
     MIM.tax_id, 
     MIM.quantity 
FROM 
@tvp_Mapping_n_Info_Master as MIM; 
+0

왜이 TAble 유형을 사용해야하는지, 그리고 테이블 유형이 무엇인지 말해 주실 수 있습니까? –