Sql-Server-2008-R2
最佳實踐 - 複製表並在名稱上標記日期時間
出於備份目的,我需要將表複製到同一個數據庫中,但在 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;