Tôi có một bảng đăng nhập để thực hiện tất cả các thao tác chèn bằng một thủ tục được lưu trữ.
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
Hiện tại có khoảng 45500000 hàng trong bảng đó và tôi muốn đăng nhập trực tiếp vào một bảng khác.
Ý tưởng của tôi là sử dụng đoạn script sau
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;
Điều này có hoạt động và có tác động tối thiểu đến các thủ tục khác gọi LogInsert không?
2
Bạn không cần sp_recompile. Bộ đệm thủ tục cho mọi đối tượng sử dụng đối tượng dbo.LogTable sẽ tự động hết hạn khi bạn đổi tên đối tượng.
—
mrdenny