Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да проверите дали таблицата съществува и след това да я преименувате

Имате повече опции, едната е да направите всичко с помощта на динамични заявки. Можете също така да разгледате 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), ' ', ''), ':', ''), '-', '') (ггггММддЧЧммсс) вместо това

Както винаги, бъдете внимателни и проверявайте отново кода си, когато работите с динамични заявки!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предоставяне на достъп до една база данни на потребители/роли на друга

  2. 5 начина да коригирате грешката „Деление на нула“ в SQL Server (Msg 8134)

  3. Проблем с промяна на сортирането на база данни (SQL Server 2008)

  4. Как да декларирам масив в съхранената процедура на MS SQL Server?

  5. Как да върна няколко стойности в една колона (T-SQL)?