编写对SELECT语句的结果集进行操作的存储过程

时间:2018-09-07 23:01:38

标签: sql-server table-valued-parameters

如何编写一个存储过程,将一个表值参数作为输入但该表值参数由具有现有表的列的行组成?

我可以手动创建一个与该表匹配的TVP,用查询填充它,然后将其传递到存储过程中,但是我不禁想到有一种更聪明的方法,因此不必手动保持TVP与我的桌子。

基本上我希望能够做到

EXEC MYCOOLSPROC @myTVP = resulting rows of 'SELECT * FROM AWESOME_TABLE WHERE ID > 10 AND ID < 20'

1 个答案:

答案 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