将用户定义的表传递给存储过程

时间:2015-05-28 19:17:36

标签: sql-server stored-procedures sql-server-2008-r2 user-defined-types

我有一个用户定义表,我从存储过程中传入存储过程。

DECLARE @tmpInput MyTableType;

--Table is populated from an INPUT XML

exec ValidateInputXML SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';

现在这不会给我一个错误,但是当我使用ValidateInputXML运行select时,表没有数据。

2 个答案:

答案 0 :(得分:15)

您还可以对存储过程使用Table-Valued参数。 例如。

self.outer_scopes[self.children.item(i).getNodeName()][self.children.item(i).item(j).getNodeName()] \
= \
self.children.item(i).item(j).getTextContent()

答案 1 :(得分:0)

用户定义表的范围在存储过程中。执行存储过程后,将创建并填充表@tmpInput,之后您将无法访问它。

来自文档:

  

变量的范围从声明的点开始持续到   声明它的批处理或存储过程的结束。

您有两种选择:

选项1:

创建一个表,您可以在其中永久存储记录。

选项2:

select来自存储过程内部的记录,如:

alter procedure ValidateInputXML 
DECLARE @tmpInput MyTableType;

--Table is populated from an INPUT XML

SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';

然后

exec ValidateInputXML