2013-11-14 78 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,现在尝试,但如果我记得正确,表变量需要别名,如果在表达式中使用。