如何编写一个存储过程,将一个表值参数作为输入但该表值参数由具有现有表的列的行组成?
我可以手动创建一个与该表匹配的TVP,用查询填充它,然后将其传递到存储过程中,但是我不禁想到有一种更聪明的方法,因此不必手动保持TVP与我的桌子。
基本上我希望能够做到
EXEC MYCOOLSPROC @myTVP = resulting rows of 'SELECT * FROM AWESOME_TABLE WHERE ID > 10 AND ID < 20'
答案 0 :(得分:0)
首先,您需要在MYCOOLSPROC
中将tvp参数创建为READONLY
CREATE PROCEDURE MYCOOLSPROC
@bTVP MYTVP READONLY
AS
BEGIN
SELECT * FROM @bTVP
END
这是如何与MYCOOLSPROC一起使用的示例
声明TVP变量,在其中插入一些值 宣告@aTVP MYTVP
INSERT INTO @aTVP ( ... ) VALUES ( ... )
或者它可以来自另一个存储过程的结果
INSERT INTO @aTVP
EXEC AnotherStoredProcedure
然后您可以将@aTVP
传递给MYCOOLSPROC
EXEC MYCOOLSPROC @bTVP = @aTVP