我有一个用户定义的表,我正在从存储过程中将其传递到另一个存储过程中。
DECLARE @tmpInput MyTableType;
--Table is populated from an INPUT XML
exec ValidateInputXML SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';
现在这个不会给我错误,但是当我从ValidateInputXML运行一个选择时,表格没有数据。
我有一个用户定义的表,我正在从存储过程中将其传递到另一个存储过程中。
DECLARE @tmpInput MyTableType;
--Table is populated from an INPUT XML
exec ValidateInputXML SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';
现在这个不会给我错误,但是当我从ValidateInputXML运行一个选择时,表格没有数据。
您还可以为存储过程使用表值参数。例如:
/* Create a table type. */
CREATE TYPE MyTableType AS TABLE
( Column1 VARCHAR(50)
, ........ );
GO
/* Create a procedure to receive data for the table-valued parameter. */
CREATE PROCEDURE dbo. ValidateInputXML
@TVP MyTableType READONLY
AS
-- Do what ever you want to do with the table received from caller
GO
/* Declare a variable that references the type. */
DECLARE @myTable AS MyTableType;
-- Fill @myTable with data and send it to SP.
insert into @myTable SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';
/* Pass the table variable data to a stored procedure. */
EXEC ValidateInputXML @myTable ;
GO
用户定义表的范围在存储过程中。一旦执行存储过程,表@tmpInput
将被创建和填充,此后您将无法访问它。
从文档中可以看出:
变量的作用域持续时间从它声明的时刻开始,直到批处理或存储过程结束为止。
您有两个选择:
选项1:
创建一个表,以便您可以永久存储记录。
选项2:
在存储过程内部选择记录,例如:
alter procedure ValidateInputXML
DECLARE @tmpInput MyTableType;
--Table is populated from an INPUT XML
SELECT * FROM @tmpInput TI WHERE TI.EntryType = 'Attribute';
然后
exec ValidateInputXML