我只是尝试创建一个名为“ListOfName”的表类型参数,并在我的过程中设置这种类型的参数。但是发生了错误:
必须声明标量变量“@Table_Name_List”
但我宣布
CREATE TYPE ListOfName AS TABLE (Table_Name nvarchar(50) );
CREATE PROCEDURE spTest
@Table_Name_List ListOfName READONLY
AS
SELECT * from dbo.Table_Size_Daily
WHERE Table_NAME IN (@Table_Name_List)
Go
如果我在定义块之前添加一个语句,
DECLARE @Table_Name_List AS ListOfName;
错误是:
已声明变量名'@Table_Name_List'。 变量名在查询批处理中必须是唯一的或存储的 过程
我该如何解决?非常感谢
答案 0 :(得分:1)
我可以看到对表类型有什么误解。即使表类型中只有一列,也不能将其视为单列参数。
将Table类型参数视为任何其他表,而不考虑 您拥有的列数。
为了解决您的问题,我希望您的WHERE
条件更改如下:
WHERE Table_NAME IN (SELECT Table_Name FROM @Table_Name_List)
但是,我强烈建议您在继续执行任何实现之前阅读Table类型的一些教程。例如,MSDN上的This Table Valued Parameters article可以清楚地了解它。