2015-04-17 39 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

您可以始終指定最大尺寸,但我不認爲這是必要的,因爲尺寸不會顯着影響計費