Синтаксис присоединения переменной к команде alter

#sql-server #database

#sql-сервер #База данных

Вопрос:

Я работаю в SQL Server версии 17.9.1

У меня возникли проблемы с запуском инструмента диаграммы базы данных. Я нашел здесь код для изменения авторизации в базе данных. Код работал нормально. Моя проблема в том, что у меня есть несколько баз данных, которые мне нужно обновить с помощью созданных мной хранимых процедур. У меня есть переменная, которую необходимо присоединить к оператору alter, но я не знаком с синтаксисом кода для этого.

Вызывается переменная @TrainDB1 .

Команда alter является

 Alter AUTHORIZATION ON DATABASE::NorthWindlev3 TO sa;
  

Буду признателен за любую помощь.

Ответ №1:

Вам нужно будет использовать динамический SQL, чтобы вы могли передать свою переменную для использования в инструкции alter authorization

Вот пример

 declare @DBName nvarchar(max) = 'someDb', @SQL nvarchar(max) = ''
select @SQL = 'Alter AUTHORIZATION ON DATABASE::'   quotename(@DBName)   ' TO sa'
exec sp_executesql @SQL
  

Комментарии:

1. Это было бы довольно сложной проблемой, подобной этой, и я не сомневаюсь, что именно поэтому у нее понижающий голос. При внедрении вы должны убедиться, что вы правильно цитируете динамические объекты.

2. @larnu обновлен, чтобы использовать quotename, чтобы позаботиться об этом.