Du har fler alternativ, ett är att göra det hela med hjälp av dynamiska frågor. Du kan också ta en titt på SQLCMD. Jag kommer att visa dig en snabb modell av den dynamiska SQL-lösningen.
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 */
Observera att 112 datumformat (se konvertera) inte innehåller tidsvärde, därför vill du ändra det för att tillåta skriptet att köras flera gånger om dagen. Du kan till exempel använda select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '')
(ååååMMddHHmmss) istället
Som alltid, var försiktig och dubbelkolla din kod när du arbetar med dynamiska frågor!