Sql-Server-2008-R2

最佳實踐 - 複製表並在名稱上標記日期時間

  • July 16, 2019

出於備份目的,我需要將表複製到同一個數據庫中,但在 TableName 上有日期和時間。

我使用 T-sql Job 執行此操作的解決方案:

select * into dbo.tmp from dbo.something 
go

declare @thedate as varchar(100)
set @thedate = 'something'+convert(nvarchar(MAX), getdate(), 13)

EXEC sp_rename 'tmp', @thedate
go

這樣做有更好的做法嗎?

我想知道是否複製到 tmp 表並更改名稱可能不是一個好主意!!!。我收到一條消息,上面寫著 “警告:更改對象名稱的任何部分都可能破壞腳本和儲存過程。”

該消息警告您,“重命名表後,任何依賴對象(如視圖、觸發器、SP 或函式)都將無法執行。這是正常的。

如果要避免此消息,可以使用以下腳本備份同一數據庫中的表。

DECLARE @TableToBackup VARCHAR(128) = 'Tbl_MyTable'
DECLARE @BackupTableName VARCHAR(512)  = @TableToBackup+convert(nvarchar(MAX), getdate(), 13)

EXEC  ('SELECT * INTO ['+@BackupTableName+'] FROM '+@TableToBackup+';')

謝謝!

我會這樣做以專門避免該錯誤消息。但是,這只是對您的警告,重命名對像不會更改對該對象的引用。對於新創建的對像或您確定的對象,沒有害處,這只是一個警告。

DECLARE @thedate NVARCHAR(100) = CONVERT(NVARCHAR(100), GETDATE(), 13);
DECLARE @SourceTableName NVARCHAR(256) = 'dbo.sourcetable';
DECLARE @TargetTableNaem NVARCHAR(256) = 'dbo.sourcetable_' + @thedate;
DECLARE @SQLCommand NVARCHAR(4000)

SET @SQLCommand = 'SELECT * INTO ' + @TargetTableNaem + ' FROM ' + @SourceTableName;

EXEC sp_executesql @SQLCommand;

引用自:https://dba.stackexchange.com/questions/242942