Sql 存储过程中的Alter数据库

Sql 存储过程中的Alter数据库,sql,sql-server,azure-sql-database,Sql,Sql Server,Azure Sql Database,我正在尝试创建一个新的存储过程,以执行alterdatabase命令来修改数据库服务层 因此,我尝试创建存储过程,但它不工作,并且返回一个错误 “(”附近的语法不正确 有人能告诉我怎么做吗?或者语法错误在哪里? 我已经用任何存储过程运行了这一个,它成功了 提前谢谢 create procedure spChangeTiersDB @MaxSize varchar(8), @Edition varchar(20), @Service varchar(5) as beg

我正在尝试创建一个新的存储过程,以执行
alterdatabase
命令来修改数据库服务层

因此,我尝试创建存储过程,但它不工作,并且返回一个错误

“(”附近的语法不正确

有人能告诉我怎么做吗?或者语法错误在哪里? 我已经用任何存储过程运行了这一个,它成功了

提前谢谢

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

不能参数化
alterdatabase
语句

按照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'

似乎我们无法在无人参与的情况下进行这些更改,如存储过程、函数等。因此,我在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;
        }
    }
创建过程#spChangeDBtier @MaxSize VARCHAR(10)、@Edition VARCHAR(10)、@Service VARCHAR(10)作为开始 声明@SQL NVARCHAR(最大值) set@sql='alterdatabasetestmodify(maxsize='+@maxsize+',edition=''+@maxsize++',service_objective='''+@maxsize++'' EXEC@SQL 结束


您始终可以指定最大大小,但我认为这不是必需的,因为大小不会显著影响计费

Azure数据库限制您的操作:您可能会遇到这些限制之一。当然,MaxSize听起来像是他们想要管理的事情之一,而不是您(您部分按大小付费)。好的,我同意你的看法,问题是我可以在我的SQL Server Management Studio中更改这些内容。这意味着可能会有一些无人参与的内容来进行这些更改,如存储过程、函数等。不是你可以用本地SQL数据库做的所有事情都可以用Azure数据库来完成。我非常确定MaxSize将是一个。这是r可以与动态SQL一起使用,因为结果返回一个错误“靠近“(”)的语法不正确”。因此,我无法实现该错误。感谢您的帮助。请检查我答案的更新,您完全可以在SP中完成此操作