SQL Server 2008:将记录集分配给变量

时间:2015-02-25 17:23:38

标签: sql-server sql-server-2008

我正在使用SQL Server 2008。 我需要能够通过存储过程参数传递表输出。

示例:MyTable(col1,col2)具有以下数据:

1, 'A'
2, 'B'
3, 'C'

存储过程:

sp_read_tbl (@p1_col1 int     OUT,
             @p1_col2 char(1) OUT,
             @p2_col1 int     OUT,
             @p2_col2 char(1) OUT,
             @p3_col1 int     OUT,
             @p3_col2 char(1) OUT)

如何在存储过程中执行此操作?

1 个答案:

答案 0 :(得分:1)

如上所述,这不是通常的方式从存储过程中的表中获取数据。如果你的表得到第四行,你将不仅要重做存储过程,还要重新调用它的代码。

但如果你真的需要这样做,你可以。有很多方法;我的看起来像这样:

-- DO NOT start your stored procs with "sp_".  That's reserved for MS.
-- Many people use "up_" as a substitute.  
create procedure dbo.up_read_tbl 
(  
         @p1_col1 int     OUT,
         @p1_col2 char(1) OUT,
         @p2_col1 int     OUT,
         @p2_col2 char(1) OUT,
         @p3_col1 int     OUT,
         @p3_col2 char(1) OUT
)
AS 
    SELECT top 1
           @p1_col1 = col1
       ,   @p1_col2 = col2
    FROM   dbo.MyTable

    SELECT top 1
           @p2_col1 = col1
       ,   @p2_col2 = col2
    FROM   dbo.MyTable
    WHERE  col1 <> @p1_col1

    SELECT top 1
           @p3_col1 = col1
       ,   @p3_col2 = col2
    FROM   dbo.MyTable
    WHERE  col1 <> @p1_col1
      AND  col1 <> @p2_col1