sql >> Databáze >  >> RDS >> Sqlserver

Jak zkontrolovat existenci tabulky a poté ji přejmenovat

Máte více možností, jednou je udělat celou věc pomocí dynamických dotazů. Můžete se také podívat na SQLCMD. Ukážu vám rychlý model dynamického řešení 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 */

Vezměte prosím na vědomí, že formát data 112 (viz převod) neobsahuje časovou hodnotu, proto jej chcete změnit, aby se skript spouštěl vícekrát za den. Můžete jít například pomocí select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '') (yyyyMMddHHmmss)

Jako vždy buďte opatrní a při práci s dynamickými dotazy znovu zkontrolujte svůj kód!




  1. Mohu předat číslo pro varchar2 v Oracle?

  2. Automatické zvýšení v Oracle bez použití spouštěče

  3. Vypočítejte věk v letech v PostgreSQL

  4. Klauzule WHERE poskytuje jiný výsledek, ať už v poddotazu nebo ne