2010-09-17 98 views
4

我有一个SQL存储过程,我不能改变。它只需要很少的输入参数,并返回一个包含100多行和几列的表格。如何从存储过程返回获取COUNT?

exec dbo.Select_Data 0, 0, 18, 50 

我需要一些东西来得到返回的行数:

select count(*) from (exec dbo.Select_Data 0, 0, 18, 50) 

和方法,从例如得到的值名称栏:

select Id, Name from (exec dbo.Select_Data 0, 0, 18, 50) where Id=10 

我该怎么办呢?

+0

答案可能取决于您使用的确切数据库,那它是什么? – 2010-09-17 08:28:16

+0

我正在使用MS SQL 2008,如果回答您的问题 – Kromster 2010-09-17 08:32:55

回答

5

您需要创建一个临时表来存放存储过程的结果。您可以查询临时表。临时表的模式必须与存储过程的输出相匹配。

实施例:

CREATE TABLE #temp 
(
ID INT, 
NAME VARCHAR(100), 
... 
) 

INSERT INTO #temp 
Exec dbo.MyStoredProc 

SELECT COUNT(*) FROM #temp 

SELECT ID, NAME FROM #temp 
WHERE ID = 10 

DROP TABLE #temp 
+0

我有一个关于输出表模式的问题。我是否需要写下列表中存储过程返回的所有参数?有没有办法避免这一步?如果有人在我不知情的情况下更新存储过程会怎么样? – Kromster 2010-09-17 08:32:06

+2

检查“@@ rowcount”而不是'SELECT COUNT(*)FROM#temp'应该保存对临时表的扫描。 – 2010-09-17 08:33:29

+0

@Krom - 临时表的模式必须匹配来自存储过程的输出而不是参数列表。 – codingbadger 2010-09-17 08:44:04

2

可以将数据插入到一个在存储器中或临时表(取决于数据的数量)。

DECLARE @TempTable TABLE 
(
    ID INT, 
    DATA VARCHAR(20) 
) 
INSERT INTO @TempTable 
EXEC sp_executesql N'select 1 AS ID, ''Data'' AS DATA' 

SELECT 
* 
FROM @TempTable