2015-04-17 2 views
0

Я пытаюсь создать новую хранимую процедуру для выполнения команды Alter Database для изменения базовых уровней обслуживания.Alter Database в хранимой процедуре

Итак, я попытался создать хранимую процедуру, но он не работает, и она возвращает ошибку

Неправильный синтаксис около «(».

Может кто-нибудь сказать мне, как я могу это сделать? Или где ошибка синтаксиса? Я запускать этот из любой хранимой процедуры, и она работала.

Спасибо заранее.

create procedure spChangeTiersDB 
    @MaxSize varchar(8), 
    @Edition varchar(20), 
    @Service varchar(5) 
as 
begin 
    ALTER DATABASE DB_Name 
    MODIFY (
    MAXSIZE = @MaxSize, 
    EDITION = @Edition, 
    SERVICE_OBJECTIVE = @Service) 
end 
+0

Azure dat что вы можете сделать: вы можете столкнуться с одним из этих ограничений. Конечно, MaxSize звучит как одна из вещей, которыми они хотят управлять, а не вы (вы частично оплачиваете размер). –

+0

Хорошо, я согласен с тобой, я могу изменить это в своей SQL Server Management Studio. Это означает, что у него может быть что-то без внимания, чтобы делать такие изменения, как хранимые процедуры, функции и т. Д. – Jotch

+0

Не все, что вы можете сделать с локальной базой данных SQL, может быть выполнено с помощью Azure. Я уверен, что MaxSize будет одним. –

ответ

2

Вы не можете параметризовать ALTER DATABASE заявления

https://social.msdn.microsoft.com/Forums/sqlserver/en-US/578d87fa-9939-4cb0-bb72-e37cee8abf25/can-i-pass-parameter-to-an-alter-database-command

Как было предложено на форуме ссылку MSDN, использовать динамический SQL вместо

CREATE PROCEDURE spChangeDBtier 
@MaxSize VARCHAR(10),@Edition VARCHAR(10),@Service VARCHAR(10) AS BEGIN 
DECLARE @SQL NVARCHAR(MAX) 
SET @SQL = CONCAT('ALTER DATABASE dbname MODIFY (MAXSIZE =',@MaxSize,'GB, Edition = ''',@Edition,''',SERVICE_OBJECTIVE = ''',@Service,''')') 
EXEC(@SQL) 
END 

исполнение Пример:

spChangeDBtier '500','PREMIUM','P1' 
+0

Это не может быть с Dynamic SQL, потому что результат возвращает ошибку «Неправильный синтаксис рядом» («.» .Так, я не могу это реализовать. Спасибо за вашу помощь. – Jotch

+0

@Jotch проверить код в ответе, он должен работать – Akash

0

Кажется, мы не могут сделать эти изменения w с чем-то без внимания, как хранимые процедуры, функции и т. д. Итак, я сделал что-то в C# для изменения с сервера. Это мой ответ на данный момент. Если у кого-то есть такая же проблема, вот код, который поможет.

public static bool ChangeDBTier(string DbName, string MaxSize, string Edition, string Service) 
    { 
     try 
     { 
      using (SqlConnection con = new SqlConnection(ConnectionString)) 
      { 
       con.Open(); 
       String sqlCommandText = @"ALTER DATABASE " + DbName + " MODIFY (MAXSIZE = " + MaxSize + ", EDITION = '" + Edition + "', SERVICE_OBJECTIVE = '" + Service + "')"; 
       SqlCommand sqlCommand = new SqlCommand(sqlCommandText, con); 
       sqlCommand.ExecuteNonQuery(); 
      } 
      return true; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
+0

Проверьте обновление до моего ответа, вы абсолютно можете это сделать в SP – Akash

0

CREATE PROCEDURE #spChangeDBtier @MaxSize VARCHAR (10), @ издание VARCHAR (10), @ службы VARCHAR (10) AS BEGIN DECLARE @sql NVARCHAR (MAX) набор @sql = «изменить базу данных тест модификации (MaxSize = '+ @MaxSize +', издание = '' '+ @MaxSize + ''', service_objective = ''»+ @MaxSize + '' ')' EXEC @SQL END

Вы может всегда указывать максимальный размер, но я не думаю, что это необходимо, так как размер не будет сильно влиять на выставление счета

Смежные вопросы