sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan kontrollerer du, at tabellen eksisterer og derefter omdøber den

Du har flere muligheder, en er at gøre det hele ved hjælp af dynamiske forespørgsler. Du kan også tage et kig på SQLCMD. Jeg vil vise dig en hurtig mock up af den dynamiske SQL-løsning.

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 */

Bemærk venligst, at 112 datoformat (se konverter) ikke indeholder tidsværdi, derfor vil du ændre det for at tillade scriptet at køre flere gange om dagen. Du kan for eksempel gå med select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '') (ååååMMddHHmmss) i stedet

Som altid, vær forsigtig og dobbelttjek din kode, når du arbejder med dynamiske forespørgsler!




  1. Få MAX værdi i mysql-forespørgsel

  2. SonarQube-installation med Oracle DB - Få bruger findes ikke

  3. Sikkerhedskopier en database i SQL Server 2017

  4. Opbygning af ternære forhold ved hjælp af Laravel Eloquent Relationships