2010-09-17 47 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