错误"必须声明标量变量"使用表参数创建存储过程时

时间:2015-02-27 17:25:04

标签: sql sql-server

使用table参数创建存储过程并尝试在连接中使用该参数时,我收到错误:必须声明标量变量“@tokens”。

请告诉我在连接中使用参数需要做什么?

CREATE PROCEDURE [dbo].[MyProc] @tokens [TokenTable] readonly
AS
BEGIN
UPDATE DN
SET DN.Deleted = 1
FROM [dbo].[DeviceNotificationTokens] DN
JOIN @tokens ON DN.Token = @tokens.Token AND DN.Provider = @tokens.Provider
END

1 个答案:

答案 0 :(得分:2)

加入TVP时需要使用别名:

CREATE PROCEDURE [dbo].[MyProc] @tokens [TokenTable] readonly
AS
BEGIN
UPDATE DN
SET DN.Deleted = 1
FROM [dbo].[DeviceNotificationTokens] DN
JOIN @tokens t
    ON DN.Token = t.Token AND DN.Provider = t.Provider
END

来自MSDN

  

以下Transact-SQL UPDATE语句演示了如何使用   表值参数通过将其连接到Categories表。 当你   必须使用FROM子句中带有JOIN的表值参数   也是别名,如此处所示,表值参数是   别名为" ec":

UPDATE dbo.Categories
    SET Categories.CategoryName = ec.CategoryName
    FROM dbo.Categories INNER JOIN @tvpEditedCategories AS ec
    ON dbo.Categories.CategoryID = ec.CategoryID;