我有一个用户定义表,我从存储过程中传入存储过程。
DECLARE @tmpInput MyTableType;
--Table is populated from an INPUT XML
exec ValidateInputXML SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';
现在这不会给我一个错误,但是当我使用ValidateInputXML运行select时,表没有数据。
答案 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