sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man kontrollerar att tabellen existerar och sedan byter namn på den

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!




  1. MySql - långsam sändande datafas

  2. MySQL - Om det börjar med ett nummer eller specialtecken

  3. Oracle:exporterar endast schema

  4. Konvertera 'datetime2' till 'time' i SQL Server (T-SQL-exempel)