すべての挿入が単一のストアドプロシージャによって行われるログインテーブルがあります。
CREATE TABLE dbo.LogTable(
LogRefnr int IDENTITY(1, 1) NOT NULL,
LogQuery varchar(255) NOT NULL,
LogTime datetime NOT NULL,
logQueryDuration int NULL,
LogSessionID int NULL,
CONSTRAINT PK_Log PRIMARY KEY CLUSTERED (LogRefnr)
)
go
Create procedure DBO.LogInsert ( @Query varchar(255), @time datetime, @duration int, @SessinID int) as
begin
Insert into LogTable ( LogRefnr, LogQuery, logQueryDuration, LogSessionID)
Values (@Query, @time, @duration, @SessinID);
end;
GO
現在、そのテーブルには約45500000行があり、ロギングを別のテーブルに転送したいです。
私のアイデアは、次のスクリプトを使用することです
begin Transaction
exec sp_rename LogTable, LogTableOld;
CREATE TABLE dbo.LogTable(
LogRefnr int IDENTITY(46000000, 1) NOT NULL, -- greater than select max(LogRefnr) from LogTableOld
LogQuery varchar(255) NOT NULL,
LogTime datetime NOT NULL,
logQueryDuration int NULL,
LogSessionID int NULL,
CONSTRAINT PK_Log2 PRIMARY KEY CLUSTERED (LogRefnr);
)
go
sp_recompile LogTable;
go
Commit;
これは機能し、LogInsertを呼び出す他の手順への影響は最小限ですか?
2
sp_recompileは必要ありません。オブジェクトdbo.LogTableを使用するオブジェクトのプロシージャキャッシュは、オブジェクトの名前を変更すると自動的に期限切れになります。
—
mrdenny