Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara memeriksa tabel yang ada dan kemudian mengganti namanya

Anda memiliki lebih banyak opsi, salah satunya adalah melakukan semuanya menggunakan kueri dinamis. Anda juga dapat melihat SQLCMD. Saya akan menunjukkan kepada Anda tiruan cepat dari solusi SQL dinamis.

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

Harap dicatat, bahwa format tanggal 112 (lihat konversi) tidak mengandung nilai waktu, oleh karena itu Anda ingin mengubahnya agar skrip dapat dijalankan beberapa kali sehari. Anda dapat pergi misalnya dengan select REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(32), GETDATE(), 120), ' ', ''), ':', ''), '-', '') (yyyyMMddHHmmss) sebagai gantinya

Seperti biasa, berhati-hatilah dan periksa kembali kode Anda saat bekerja dengan kueri dinamis!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016 :sys.dm_exec_function_stats

  2. Terapkan Luar Mengembalikan kolom secara tidak terduga NOT NULL saat tidak ada kecocokan

  3. Bagaimana cara memisahkan tanggal dari string?

  4. Cara mendapatkan nilai peningkatan otomatis dari baris terakhir di sisipan

  5. Ambil nama kolom dan jenis prosedur tersimpan?