2015-04-17 40 views
0

我试图创建一个新的存储过程来执行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

这既不能使用动态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

您可以始终指定最大尺寸,但我不认为这是必要的,因为尺寸不会显着影响计费