2
我想調用sp_spaceused
來獲取我想監視的幾個特定表中的行數,但我試圖避免使用遊標。如何在特定表上使用sp_spaceused?
我做了一個表來保存所有我要監控的表:
CREATE TABLE MonitoredTable
(
MonitoredTableID INT PRIMARY KEY IDENTITY(1, 1) NOT NULL
, DatabaseName NVARCHAR(128) NOT NULL
, SchemaName NVARCHAR(128) NOT NULL
, TableName NVARCHAR(128) NOT NULL
, RowNumberThreshold INT NOT NULL
, IsActive BIT NOT NULL
)
我的問題是:我想創建一個函數,將只爲表自己的行數返回MonitoredTableID
小號超過定義的RowNumberThreshold
。
這是我想要做的,什麼,但,這是無效的SQL:
CREATE FUNCTION dbo.GetTablesLargerThanThreshold()
RETURNS @tablesLargerThanThreshold TABLE
(
MonitoredTableID INT NOT NULL
)
AS
BEGIN
INSERT INTO @tablesLargerThanThreshold
SELECT MonitoredTableID
FROM MonitoredTable
WHERE IsActive = 1
AND (SELECT [rows] FROM (EXEC sp_spaceused DatabaseName + '.' + SchemaName + '.' + TableName)) > RowNumberThreshold
RETURN
END
有如果rows
在MonitoredTable
數量比定義RowNumberThreshold
更大的一種方法,我可以檢查不訴諸於光標?
這比我需要的略多(我只需要sp_spaceused存儲過程中的行數)。我編輯了您的答案以匹配我使用的答案。請在您有機會確保我的筆記有意義並且正確使用查詢時快速查看。感謝你的回答!! –
我會在今天晚些時候或明天晚些時候看看。很高興我能幫上忙。 –