?
要找到數(shù)據(jù)庫中數(shù)據(jù)表占用的空間和存在的行數(shù)。可以使用sp_spaceused搭配數(shù)據(jù)表的名稱。就可以產(chǎn)生該表耗用的空間和現(xiàn)有行數(shù)。
如:
USE ADVENTUREWORKS
GO
EXEC sp_spaceused [Sales.SalesOrderHeader]
GO
?
?
但如果數(shù)據(jù)庫中包含數(shù)千的數(shù)據(jù)表,如何能利用一句SQL語句來實(shí)現(xiàn)?
?
解決方法:
一、動(dòng)態(tài)SQL:
先用T-SQL動(dòng)態(tài)產(chǎn)生表達(dá)式,然后放到一個(gè)查詢中執(zhí)行。如:
USE ADVENTUREWORKS
GO
SET NOCOUNT ON
SELECT 'EXEC SP_SPACEUSED [' + S . name + '.' + T . name + '];'
FROM sys . tables T INNER JOIN sys . schemas S
ON T . SCHEMA_ID = S . SCHEMA_ID
WHERE S . NAME = 'HumanResources'
SET NOCOUNT OFF
結(jié)果如下:
把結(jié)果復(fù)制到新的窗口執(zhí)行即可得到結(jié)果。
但這種方法需要人手操作不適合自動(dòng)化、定時(shí)化操作。
二、使用累加字符串的方式動(dòng)態(tài)生成:
因?yàn)橐詣?dòng)化,所以會(huì)利用數(shù)據(jù)表的INSERT觸發(fā)器,執(zhí)行動(dòng)態(tài)表達(dá)式。并且自動(dòng)將輸入的數(shù)據(jù)表,計(jì)算結(jié)果:
-- 建立表,執(zhí)行 insert 觸發(fā)器
USE AdventureWorks
GO
CREATE TABLE myTab
(
??? TableName VARCHAR ( 255 )
)
GO
?
?
-- 建立觸發(fā)器:
CREATE TRIGGER tr2 ON myTab
AFTER INSERT
AS
??? DECLARE @sql VARCHAR ( max )
??? SET @sql = ''
??????? -- 使用累加字符串,產(chǎn)生語句
??? SELECT @sql = @sql +
??????????? ??????????? 'EXEC sp_spaceused [' + TableName + ']; '
??????????? FROM inserted
??????????? -- 利用 EXECUTE 執(zhí)行動(dòng)態(tài)語句
??? EXEC ( @sql )
?
-- 新增指定的數(shù)據(jù)表名稱,會(huì)自動(dòng)顯示數(shù)據(jù)表的使用空間:
INSERT myTab
SELECT S . name + '.' + T . name
FROM sys . tables T INNER JOIN sys . schemas S
ON T . schema_id = S . schema_id
WHERE S . name = 'HumanResources'
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
