[Azure][SQL]使用 T-SQL 透過 SSMS 建立 Azure SQL Database

[Azure][SQL]透過 SSMS 建立 Azure SQL Database

當我們在使用 Azure SQL Database 的時候,可以有不少的方式來建立資料庫,我個人比較偏好使用 T-SQL 來建立,畢竟搞資料庫的用 T-SQL 語法會比較順手一點。

 

而前天剛好有同事詢問相關的指令,於是就順手把在 Techday 2015 的範例語法給他,但同事使用 SSMS 利用 T-SQL 去建立資料庫的時候,卻得到錯誤的訊息 ?! 因此我決定把相關環境都準備起來測試一下,看是否是因為版本的問題所造成的。

 


 

首先我先測試使用 SQL Server 2012 SP2 的環境下

2001

 

先確認有連上 Azure SQL Database 的 Instance


select @@servername

select @@version

2002

 

因此我先測試建立資料庫的指令


CREATE DATABASE DEMO2012 Collate Chinese_Taiwan_Stroke_BIN
 (
   MAXSIZE = 2GB,
   EDITION = 'Standard',
   SERVICE_OBJECTIVE='S1' -- 選個 DTU 比較小的
 )
GO

很不幸的沒有建立成功,只有一個錯誤訊息「訊息 42019,層級 16,狀態 2,行 1  CreateDatabaseAsyncV3 operation failed. Please retry.

2003

 

如果改測試複製資料庫的指令


CREATE DATABASE DEMO2012
AS COPY OF jamesdb

一樣是沒有建立成功,得到一個跟建立資料庫類似的錯誤訊息「訊息 42019,層級 16,狀態 2,行 1  CreateDatabaseAsCopyAsync operation failed. Please retry.

2004


 

接下來我切換使用 SQL Server 2014 SP1 的版本來測試

4001

 

一樣先測試是否連上 Azure


select @@servername

select @@version

4002

 

接著測試建立資料庫的指令


CREATE DATABASE DEMO2014 Collate Chinese_Taiwan_Stroke_BIN
 (
   MAXSIZE = 2GB,
   EDITION = 'Standard',
   SERVICE_OBJECTIVE='S1' -- 選個 DTU 比較小的
 )
GO

跟 SQL Server 2012 的 SSMS 一樣的錯誤訊息

4003

 

同樣的複製資料庫,也是得到類似的錯誤訊息


CREATE DATABASE DEMO2014
AS COPY OF jamesdb

4004


  

最後我們使用 SQL Server 2016 CTP 的版本,來進行測試

6001

 

一樣先測試連線


select @@servername

select @@version

6002

 

接著測試建立資料庫


CREATE DATABASE DEMO2016 Collate Chinese_Taiwan_Stroke_BIN
 (
   MAXSIZE = 2GB,
   EDITION = 'Standard',
   SERVICE_OBJECTIVE='S1' -- 選個 DTU 比較小的
 )
GO

雖然時間稍微長了一點,花了 50s 的時間,但還是很順利的將我們所指定的資料庫給建立起來了

6003

 

接著測試複製資料庫的方式


CREATE DATABASE DEMO2016C 
AS COPY OF jamesdb

看來花了 40s 的時間,也完成了資料庫複製的工作

6004

 

而最後再查看一下,是否前面的錯誤訊息是否真的沒有建立出來資料庫,而後來顯示成功的訊息,是否也真的有建立成功。從 SSMS 上重新 Refresh 之後,看來真的如同訊息的狀況,在 SSMS 2016 下才有正確的建立成功。

6005


 

這樣的結果令我有些疑問,因為基本上我們透過 SSMS 只是幫我們連線,透過他來下指令,至於是否支援應該是 Azure SQL Database Instance 來處理才對,不應該是 SSMS 2012 or 2014 不能執行才對,因此我決定另外做個實驗,這次不透過工具,直接來使用 sqlcmd 來下指令。

 

當我利用 sqlcmd 連上我的資料庫之後,先確認 version 確認是正確連上 azure 之後,接著我用複製資料庫的方式來測試一下,看來都可以很順利的成功。

image

 

因此從上述的測試過程中,我想可能是 SSMS 在下指令之後,有跟 Azure 同步甚麼樣的東西,那個部分出了一點問題,正常來說應該跟用甚麼樣的工具去連接是沒有關係的才對。因此在目前的狀況下,在微軟還沒有修正這個問題之前,我想可能還是先搭配 SQL Server 2016 CTP 版本的 SSMS 來使用,會比較順利一點。