使用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
答案 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;