Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak sprawdzić, czy tabela istnieje, a następnie zmienić jej nazwę?

Masz więcej opcji, jedną jest wykonanie całości za pomocą zapytań dynamicznych. Możesz także rzucić okiem na SQLCMD. Pokażę ci szybką makietę dynamicznego rozwiązania 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 */

Należy pamiętać, że format daty 112 (patrz konwertowanie) nie zawiera wartości czasu, dlatego chcesz ją zmienić, aby skrypt mógł działać wiele razy dziennie. Możesz przejść na przykład z select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '') (rrrrMMddGGmmss)

Jak zawsze, bądź ostrożny i dokładnie sprawdź swój kod podczas pracy z zapytaniami dynamicznymi!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel do SQL Server (sqlsrv). [PDOException] nie można znaleźć sterownika

  2. Obcięcie SQL Server i ograniczenie 8192

  3. Ciąg DB Connection w Web.config do korzystania z dołączonej bazy danych .mdf nie będzie działać

  4. Dzielenie ciągu w serwerze sql

  5. Jak sprawić, aby SQL Server 2008 sprawdzał ograniczenie tabeli zezwalać tylko na niektóre znaki?