2013-11-14 4 views
3

여기에서 잘못된 것을 얻지 못하고 있습니다. 업데이트 세그먼트에서, 나는이 오류가 무엇입니까 : 내 테이블 반환 매개 변수 유형 여기오류 표 값 매개 변수가있는 스칼라 변수를 선언해야합니다.

Must declare the scalar variable "@OrderTestTVP".

입니다

CREATE TYPE [dbo].[TVP_OrderTest] AS TABLE(
    [OrderTestId] [int] NULL, 
    [OrderId] [int] NOT NULL, 
    [TestCode] [varchar](10) NOT NULL 
    ) 
GO 

ALTER PROCEDURE [dbo].[TVP_Save_OrderTest] 
    @OrderTestTVP TVP_OrderTest READONLY 
AS 
BEGIN 
    BEGIN TRY 
     DECLARE @TableOfIdentities TABLE (IdentValue BIGINT, TestCode varchar(10)) 
     INSERT INTO OrderTest 
       (
        OrderId 
        ,TestCode 
       ) 
       OUTPUT Inserted.OrderTestId,inserted.TestCode 
       INTO @TableOfIdentities(IdentValue,TestCode) 
        SELECT OrderId 
        ,TestCode 
      FROM @OrderTestTVP 
      WHERE OrdertestID = 0 

     UPDATE 
       OrderTest 
       SET 
        OrderId = @OrderTestTVP.OrderId, 
        TestCode = @OrderTestTVP.TestCode 
        FROM OrderTest INNER JOIN @OrderTestTVP 
        ON OrderTest.OrderTestId = @OrderTestTVP.OrderTestId 

     SELECT * FROM @TableOfIdentities 
    END TRY 
    BEGIN CATCH 
     exec error_catch 
    END CATCH 
END 
+0

@OrderTestTVP TVP_OrderTest READONLY에 유형 선언이 누락되었습니다. 맞습니까? –

+0

그 유형은 CREATE TYPE [dbo]. [TVP_OrderTest] AS TABLE()입니다. 사실 '삽입'세그먼트 만 유지하면 오류가 발생하지 않습니다. –

답변

10

난 당신이 조인 조작을위한 테이블 별칭을 사용해야합니다라고 말하고 싶지만 :

UPDATE 
OrderTest 
SET 
    OrderId = o.OrderId, 
    TestCode = o.TestCode 
FROM OrderTest INNER JOIN @OrderTestTVP o 
    ON OrderTest.OrderTestId = o.OrderTestId 

지금 당장은 SQL을 사용하지 못하지만 올바르게 기억해두면 식에서 변수를 사용할 때 테이블 변수에 별칭이 필요합니다.

관련 문제