从存储过程中的少数结果集中接收一个

时间:2015-02-15 09:04:48

标签: sql-server select stored-procedures sqlclr multiple-resultsets

我有一个可以正常工作的存储过程,但它里面有三个“select”s。

选择不是来自内部临时表。

这主要是程序的格式:

ALTER PROCEDURE [dbo].[STProce]  
@param1 int,
@param2 int,
@param3 int,
@param4 int,
@param5 int
AS  

select @param1 as p1, @param2 as p2, @param3 as p3

.
.
.

select @param4 as p4

.
.
.

select @param5 as p5

我正在从另一个程序执行该程序,需要在那里捕获它。

我创建了一个表,并在其中插入了程序中的“exec”,如下所示:

CREATE TABLE #stalledp
(
   RowNumber INT,
   fldid INT,
   fldLastUpdated datetime,
   fldCreationDate datetime,
   fldName nvarchar(255),
   fldPending nvarchar(255)
)

INSERT INTO #stalledp (RowNumber,fldid,fldLastUpdated,fldCreationDate,fldName,fldPending)
EXEC spDebuggerViews_GetStuckWorkflowInstances @workflowSpaceId='00000000-0000-0000-0000-000000000000',@pageNum=1,@pageSize=100000,@orderByColumn=N'fldid',@sortOrder=1,@workflowInstanceId=0,@stuckInstanceType=1,@createdDateFrom='1900-01-01 00:00:00',@createdDateTo='9999-01-01 23:59:59',@updatedDateFrom='1900-01-01 00:00:00',@updatedDateTo='9999-01-01 23:59:59'

之后我收到此错误:

Column name or number of supplied values does not match table definition.

表的列的顺序和名称与过程返回的完全相同。

是否有可能仅捕获该过程返回的一个表并避免另一个表?我根本无法改变程序。

我尝试声明一个表与第一个选择的程序相同的字段,我得到一个错误说

提前谢谢!

1 个答案:

答案 0 :(得分:-1)

有一种方法可以获得第一套记录,但其他人,我担心,你运气不好。

EXEC sp_addlinkedserver @server = 'LOCALSERVER',  @srvproduct = '',
                        @provider = 'SQLOLEDB', @datasrc = @@servername
SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC testproc2')

编辑:如果您只需要检查列的其他结果集是否为null,则可以预定义预期结果集,如下所示:

EXEC testproc2 WITH RESULT SETS (
        (a VARCHAR(MAX) NOT NULL, b VARCHAR(MAX) NOT NULL), 
        (a VARCHAR(MAX) NOT NULL)
);

如果存储过程中的查询返回空值,则会在过程中的该点引发异常。这只适用于sql server 2012及更高版本。