如何从 T-SQL 存储过程返回表

Posted

技术标签:

【中文标题】如何从 T-SQL 存储过程返回表【英文标题】:How to return table from T-SQL Stored Procedure 【发布时间】:2009-09-30 13:16:12 【问题描述】:

这里是 SQL 新手,我正在寻找一个简单的代码示例来回答我认为是一个简单的问题。

我需要编写一个按顺序执行三件事的存储过程: 1)从一个表中选择行 2) 使用#1 中结果表中的值更新另一个表中的行 3) 从#1 返回结果表。

我找不到任何关于如何从存储过程返回这样的值的示例。此外,如何从调用者(这是另一个 T-SQL 脚本)检索返回的表。

【问题讨论】:

See here - 这个问题的几乎完全相同的副本。我通过搜索“”找到它 【参考方案1】:

看看这个。

DECLARE @Table1 TABLE(
        ID INT,
        VAL int
)

INSERT INTO @Table1 (ID,VAL) SELECT 1, 1
INSERT INTO @Table1 (ID,VAL) SELECT 2, 2
INSERT INTO @Table1 (ID,VAL) SELECT 3, 3

DECLARE @Table2 TABLE(
        ID INT,
        VAL VARCHAR(MAX)
)

INSERT INTO @Table2 (ID,VAL) SELECT 1, 1
INSERT INTO @Table2 (ID,VAL) SELECT 2, 2
INSERT INTO @Table2 (ID,VAL) SELECT 3, 3

--Lets say this is the 2 tables


--now this will go into the sp
UPDATE  @Table1
SET     Val = t1.Val + t2.Val
FROM    @Table1 t1 INNER JOIN
        @Table2 t2 ON t1.ID = t2.ID

SELECT  t1.* 
FROM    @Table1 t1 INNER JOIN
        @Table2 t2 ON t1.ID = t2.ID


--and you can insert into a var table in the tsql script that calls the sp

DECLARE @Table1TSQL TABLE(
        ID INT,
        VAL int
)

INSERT INTO @Table1TSQL (ID,VAL) EXEC YourSP

【讨论】:

好的,YourSP 中允许我返回值的语法是什么? 将返回匹配上一次选择的行 这正是我正在寻找的信息。谢谢 CSharpAtl +1,但有一点更正:您不能使用表变量来接收 INSERT EXEC 语句的输出。它必须是标准(普通静态表)或临时表(#table)。 我仔细检查过,并插入到@table exec sp。我从 sql server 2005 检查了 INSERT INTO 的文档。它指出“在其范围内的表变量可以用作 INSERT 语句中的表源。”

以上是关于如何从 T-SQL 存储过程返回表的主要内容,如果未能解决你的问题,请参考以下文章

SqlServerSqlServer编程语言T-SQL的存储过程

T-SQL - 如何编写条件连接

SQL server T-SQL存储过程

如何从返回多个表的存储过程中选择特定表?

T-SQL 中具有表参数的存储过程

如何从存储过程返回的游标将数据插入临时表