Anda memiliki lebih banyak opsi, salah satunya adalah melakukan semuanya menggunakan kueri dinamis. Anda juga dapat melihat SQLCMD. Saya akan menunjukkan kepada Anda tiruan cepat dari solusi SQL dinamis.
DECLARE @TableSchema sys.sysname = N'dbo';
DECLARE @TableName sys.sysname = N'x';
DECLARE @BackupTable sys.sysname = @TableName + '_' + CONVERT(VARCHAR(32), GETDATE(), 112);
DECLARE @SQL NVARCHAR(MAX) = N'
DECLARE @TableWithSchema NVARCHAR(256) = QUOTENAME(@TableSchema) + ''.'' + QUOTENAME(@TableName);
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = @TableSchema
AND TABLE_NAME = @TableName))
BEGIN
EXEC sp_rename @TableWithSchema, @BackupTable, ''OBJECT''
END
CREATE TABLE ' + QUOTENAME(@TableSchema) + '.' + QUOTENAME(@TableName) + '(
/* Column definitions here*/
);
';
EXEC sp_executesql
@stmt = @SQL
, @params = N'@TableSchema sys.sysname, @TableName sys.sysname, @BackupTable sys.sysname'
, @TableSchema = @TableSchema
, @TableName = @TableName
, @BackupTable = @BackupTable
;
/* Do BCP here */
Harap dicatat, bahwa format tanggal 112 (lihat konversi) tidak mengandung nilai waktu, oleh karena itu Anda ingin mengubahnya agar skrip dapat dijalankan beberapa kali sehari. Anda dapat pergi misalnya dengan select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '')
(yyyyMMddHHmmss) sebagai gantinya
Seperti biasa, berhati-hatilah dan periksa kembali kode Anda saat bekerja dengan kueri dinamis!