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
はMonitoredTable
でrows
の数が定義されたよりも大きい場合、私がチェックすることができる方法はありますRowNumberThreshold
カーソルに頼らずに?
これは私が必要としているものよりもわずかです(私は、sp_spaceusedストアドプロシージャの行数だけ必要です)。あなたの答えを私が使ったものに合わせて編集しました。私の注意が理にかなっているかどうかを確認し、質問を正しく使用しているかどうかを見てください。答えをありがとう! –
私は今日または明日後にいつか見ていきます。お役に立てて嬉しいです。 –