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

SQL Server:GUNAKAN masalah prioritas basis data

Seperti yang disebutkan di komentar, Anda tidak dapat memasukkan GO di tengah sekelompok pernyataan SQL yang saling bergantung karena:

  1. GO menunjukkan akhir dari satu kumpulan yang dikompilasi dan awal dari kumpulan berikutnya. Sebagian besar konteks pernyataan (seperti IF..ELSE ) tidak dapat menjangkau GO . Dan,

  2. GO bahkan bukan pernyataan SQL, ini adalah perintah Management Studio/SQLCMD, sehingga tidak akan dikenali di tempat lain.

Situasi Anda adalah kebutuhan bersama, tetapi tidak ada satu solusi pun. Untuk kasus spesifik yang Anda daftarkan, menggunakan SQL Dinamis mungkin merupakan pendekatan terbaik:

IF EXISTS(select * from sys.databases where name='MyDB')
 BEGIN
   EXEC('
     USE MyDB
     EXEC(''
       DROP USER [tester]
        .
        .
        . 
     '')  
   ')
 END
ELSE
 PRINT 'MyDB database is not available'

Ini memanfaatkan fakta bahwa eksekusi SQL Dinamis masing-masing merupakan kumpulannya sendiri untuk kedua pengganti GO s (memulai batch baru) dan untuk mengisolasi interaksi khusus USE dengan kompiler. Tentu saja sangat kikuk karena kebutuhan untuk "membungkus dua kali" hal-hal setelah USE..GO perintah.

Perhatikan juga bahwa karena pembungkusan ganda ini, string apa pun di dalamnya harus dikutip empat kali lipat.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dapatkan daftar dengan nilai awal dan akhir dari tabel datetimes

  2. Tidak dapat memuat file atau rakitan Microsoft.ReportViewer.WebForms.XmlSerializers

  3. Mendapatkan data dari prosedur tersimpan dengan Entity Framework

  4. Fitur Baru di SQL Server 2017 (Mesin Database)

  5. Bagaimana cara menggabungkan tabel dengan cara setiap record digabungkan dengan record sebelumnya?