sql >> Database >  >> RDS >> Sqlserver

Hoe de tabel te controleren en deze vervolgens te hernoemen

Je hebt meer opties, een daarvan is om het hele ding te doen met behulp van dynamische query's. Je kunt ook kijken naar SQLCMD. Ik zal je een snelle mock-up laten zien van de dynamische SQL-oplossing.

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

Houd er rekening mee dat de 112-datumnotatie (zie converteren) geen tijdwaarde bevat, daarom wilt u deze wijzigen zodat het script meerdere keren per dag kan worden uitgevoerd. U kunt bijvoorbeeld gaan met select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '') (jjjjMMddHHmmss) in plaats daarvan

Wees zoals altijd voorzichtig en controleer uw code dubbel wanneer u met dynamische zoekopdrachten werkt!




  1. MySQL waar JSON een lege array bevat

  2. Waarschuwing:mysqli_connect():(HY000/1045):Toegang geweigerd voor gebruiker 'gebruikersnaam'@'localhost' (met wachtwoord:JA)

  3. MySQL-berekening van cumulatieve som met een reset-voorwaarde

  4. PHP Object Property heeft haakjes erin