sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server:BRUG databasepræferenceproblem

Som nævnt i kommentarerne kan du ikke sætte GO midt i en gruppe af SQL-sætninger, der er afhængige af hinanden, fordi:

  1. GO angiver slutningen af ​​en kompileret batch og begyndelsen af ​​den næste. De fleste sætningskontekster (som en IF..ELSE ) kan ikke spænde over en GO . Og,

  2. GO er ikke engang en SQL-sætning, det er en Management Studio/SQLCMD-kommando, så den vil ikke blive genkendt andre steder.

Din situation er et almindeligt behov, men der er ikke én enkelt løsning. For det specifikke tilfælde, du nævner, er brug af Dynamic SQL sandsynligvis den bedste tilgang:

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'

Dette udnytter det faktum, at dynamiske SQL-udsnit hver udgør deres eget batch til begge at erstatte GO s effekt (start af en ny batch) og for at isolere de ejendommelige interaktioner af USE med compileren. Det er selvfølgelig meget klodset på grund af behovet for at "dobbelt-indpakke" ting efter USE..GO kommandoer.

Bemærk også, at på grund af denne dobbeltindpakning skal alle strenge inde i den være firedobbelt citeret.



  1. Opdatering af flere rækker i MySQL

  2. 4 tips til opsætning af dine SQL Server-advarsler

  3. Overbeviser SQL-serveren om at søge baglæns på klynget indeks efter et indsættelsesskema

  4. Kan ikke tilføje mysql-driver til jboss