Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Помощ за синтаксиса на Sql Server 2008 sp_executesql - мисля, че кавичките ми не са правилни

Динамичният SQL не работи така.
Все още не можете да подадете параметри към динамичен низ, който ще се използва вместо имена на обекти.

Трябва сами да конструирате низа на заявката, като ръчно замените @DBName с реална стойност. Можете обаче да използвате параметър от дясната страна на уравнението без кавички.

Освен това, когато поставяте име на обект в заявка, винаги използвайте QUOTENAME функция. Той правилно ще избегне името, така че да няма инжектиране на sql или нежелано поведение, причинено от определени знаци в името на обект.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво е правилното име за таблица за асоцииране (връзка много към много)

  2. Как да конвертирате база данни на Visual Foxpro в база данни на SQL Server

  3. Ефективно преобразувайте редове в колони в sql сървър

  4. Свържете се с базата данни MSSQL с помощта на Flask-SQLAlchemy

  5. Как да изпълним съхранена процедура в заявка за избор