आपके पास अधिक विकल्प हैं, एक है गतिशील प्रश्नों का उपयोग करके पूरी बात करना। आप SQLCMD पर भी एक नज़र डाल सकते हैं। मैं आपको डायनामिक SQL सॉल्यूशन का एक त्वरित मॉक-अप दिखाऊंगा।
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 */
कृपया ध्यान दें, कि 112 दिनांक प्रारूप (रूपांतरित देखें) में समय मान शामिल नहीं है, इसलिए आप स्क्रिप्ट को दिन में कई बार चलाने की अनुमति देने के लिए इसे बदलना चाहते हैं। उदाहरण के लिए आप select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '')
(yyyyMMddHHmmss) इसके बजाय
हमेशा की तरह, सावधान रहें और गतिशील प्रश्नों के साथ काम करते समय अपने कोड की दोबारा जांच करें!