Bạn có nhiều lựa chọn hơn, một là thực hiện toàn bộ bằng cách sử dụng các truy vấn động. Bạn cũng có thể xem qua SQLCMD. Tôi sẽ chỉ cho bạn một bản mô phỏng nhanh về giải pháp SQL động.
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 */
Xin lưu ý rằng định dạng 112 ngày (xem chuyển đổi) không chứa giá trị thời gian, do đó bạn muốn thay đổi nó để cho phép tập lệnh chạy nhiều lần trong ngày. Ví dụ, bạn có thể chọn select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '')
(yyyyMMddHHmmss) thay vào đó
Như mọi khi, hãy cẩn thận và kiểm tra kỹ mã của bạn khi bạn đang làm việc với các truy vấn động!