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

SQL Server 2008 sp_executesql syntakshjælp - jeg tror, ​​mine citater ikke er korrekte

Dynamisk SQL fungerer ikke sådan.
Du kan stadig ikke sende parametre til en dynamisk streng, der vil blive brugt i stedet for objektnavne.

Du skal selv konstruere forespørgselsstrengen og manuelt erstatte @DBName med faktisk værdi. Du kan dog bruge en parameter i højre side af en ligning uden anførselstegn.

Når du indsætter et objektnavn i en forespørgsel, skal du også altid bruge QUOTENAME fungere. Det vil undslippe navnet korrekt, så der ikke er nogen sql-injektion eller uønsket adfærd forårsaget af bestemte tegn i et objekts navn.

SET @sql = N' IF EXISTS (SELECT NAME FROM master.sys.databases sd where name = @DBName)
BEGIN
  ALTER DATABASE ' + quotename(@DBName, '[') + N' SET  RESTRICTED_USER WITH ROLLBACK IMMEDIATE
  ALTER DATABASE ' + quotename(@DBName, '[') + N' SET  SINGLE_USER WITH ROLLBACK IMMEDIATE
  DROP DATABASE ' + quotename(@DBName, '[') + N' 
END';


  1. SQLite - Kunne ikke åbne databasefilen

  2. Simpelt rekursivt træ i PHP / MySQL

  3. Mysql::Fejl:Den angivne nøgle var for lang; max nøglelængde er 1000 bytes

  4. Vis avancerede serverkonfigurationsindstillinger i SQL Server (T-SQL)