SQL Server 2005で複数のレコードセットを返す出力ストアドプロシージャを読み取ります
-
12-09-2019 - |
質問
私は、プログラムでシステムストアドプロシージャをsp_spaceusedを実行した結果にアクセスしようとしている。
あなたは、パラメータとしてオブジェクトの名前を渡すと、、SPは
あなたはこのように読むことができますレコードセットを返します。
CREATE TABLE #TempTable
( [Table_Name] varchar(50),
Row_Count int,
Table_Size varchar(50),
Data_Space_Used varchar(50),
Index_Space_Used varchar(50),
Unused_Space varchar(50)
)
insert into #TempTable EXEC( 'sp_spaceused "tablexx"' )
select * from #TempTable
Table_Name Row_Count Table_Size Data_Space_Used Index_Space_Used Unused_Space
------------ ----------- ----------- ---------------- ----------------- ------------
tablexx 67 64 KB 16 KB 48 KB 0 KB
(1 row(s) affected)
(1 row(s) affected)
の問題は、パラメータなしで使用され、このストアドプロシージャは、次のように、二つの異なるレコードセットを返すことです
sp_spaceused
database_name database_size unallocated space
-------------- -------------- ------------------
Convenios 11622.75 MB 3.16 MB
reserved data index_size unused
------------- ------------- ----------- ---------
11897696 KB 11784392 KB 103264 KB 10040 KB
私はちょうど変数にDATABASE_SIZEを取得したい...だから実際には問題はプログラムで複数のレコードセットを返すストアドプロシージャによって返されたデータにアクセスする方法です...
どのように私はこれを達成することができますか?
解決
私は、ストアドプロシージャによって返される2番目の結果セットのホールドを得ることのあなたの元の問題のためのソリューションを持っていません。しかし、ここで、この場合、あなたはおそらくほぼ同じ情報をあなたに与えるべき、代わりにこのスクリプトを使用し、それは素敵な、きれいなT-SQLスクリプトだ可能性があります:
SELECT
t.NAME AS TableName,
i.name as indexName,
p.[Rows],
sum(a.total_pages) as TotalPages,
sum(a.used_pages) as UsedPages,
sum(a.data_pages) as DataPages,
(sum(a.total_pages) * 8) / 1024 as TotalSpaceMB,
(sum(a.used_pages) * 8) / 1024 as UsedSpaceMB,
(sum(a.data_pages) * 8) / 1024 as DataSpaceMB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
WHERE
t.NAME NOT LIKE 'dt%' AND
i.OBJECT_ID > 255 AND
i.index_id <= 1
GROUP BY
t.NAME, i.object_id, i.index_id, i.name, p.[Rows]
ORDER BY
object_name(i.object_id)
あなたはまだこのソリューションについてどのように、sp_spaceused
はPROCを保存使用して主張する場合:データベースのテーブルごとに繰り返しsp_MSforeachtable
を呼び出すために文書化されていない(ただし、非常に便利)sp_spaceused
ストアドプロシージャを使用します:
EXEC sp_MSforeachtable @command1="EXEC sp_spaceused '?'"
このケースでは、データベース内のテーブルごとに1つの行を取得し、あなたはそれをキャッチし、あなたの「スペース使用表」に挿入することができる必要があります。
この情報がお役に立てば幸い!
マルク
他のヒント
あなたは結果をDataSetを記入するときに、.NETを使用している場合、それは各結果セットのデータテーブルを作成します。
所属していません StackOverflow