SQL Database にてスクリプトの生成が行えない

 

山田 浩史
SQL Engine Support Engineer

みなさん、こんにちは。今回は、Windows Azure SQL Database を使用していると直面しうるエラーについて紹介します。

現象:
SQL Server Management Studio(SSMS) を使用して SQL Database 上のデータベースに対してスクリプト生成を行うとエラーで失敗する。

エラーレポートを確認すると以下のエラーが出力されている。

------
名前:
 'test_database' からオブジェクトの一覧を取得しています。

結果:
失敗

メッセージ:
     Microsoft.SqlServer.Management.Sdk.Sfc.EnumeratorException: この要求のデータを取得できませんでした。
---> Microsoft.SqlServer.Management.Sdk.Sfc.InvalidVersionEnumeratorException: バージョン 11.0 ではサポートされていない操作。
場所 Microsoft.SqlServer.Management.Smo.XmlReadDoc.LoadFile(Assembly a, String strFile)
場所 Microsoft.SqlServer.Management.Smo.SqlObject.LoadInitDataFromAssemblyInternal(Assembly assemblyObject, String file, ServerVersion ver, String alias, StringCollection requestedFields, Boolean store, StringCollection roAfterCreation, DatabaseEngineType databaseEngineType)
場所 Microsoft.SqlServer.Management.Smo.SqlObject.LoadInitData(String file, ServerVersion ver, DatabaseEngineType databaseEngineType)
場所 Microsoft.SqlServer.Management.Sdk.Sfc.ObjectCache.LoadElement(ObjectLoadInfo oli, ServerVersion ver, DatabaseEngineType databaseEngineType)
場所 Microsoft.SqlServer.Management.Sdk.Sfc.ObjectCache.GetElement(ObjectLoadInfo oli, ServerVersion ver, DatabaseEngineType databaseEngineType)
場所 Microsoft.SqlServer.Management.Sdk.Sfc.ObjectCache.GetAllElements(Urn urn, ServerVersion ver, DatabaseEngineType databaseEngineType)
場所 Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetObjectsFromCache(Urn urn, Object ci)
場所 Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetData(Request req, Object ci)
場所 Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.GetData(Object connectionInfo, Request request)
場所 Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.Process(Object connectionInfo, Request request)
--- 内部例外スタック トレースの終わり ---
場所 Microsoft.SqlServer.Management.SqlScriptPublish.GeneratePublishPage.worker_DoWork(Object sender, DoWorkEventArgs e)
場所 System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
場所 System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
------

原因:
製品の不具合です。
本現象は以下の 2 つの条件を満たす場合に発生します。

    ・SSMS のバージョンが 11.00.3000 未満の場合(※1)
    ・SQL Database のデータベースの照合順序がデフォルトの "SQL_Latin1_General_CP1_CI_AS" 以外に設定されている場合(※ 2)

※1 SSMS のバージョンは、[ヘルプ] - [バージョン情報] から確認出来ます。
※2 データベースの照合順序は以下のクエリにて確認出来ます。
      SELECT name, collation_name FROM sys.databases

対処方法:
本現象は下記サイトで提供している、SSMS 2012 SP1 (11.00.3000) にて修正されています。
そのため、こちらのバージョンより新しい SSMS を使用することで本現象は回避出来ます。

例:

    Microsoft SQL Server 2012 Service Pack 1 (SP1) Express
    https://www.microsoft.com/ja-jp/download/details.aspx?id=35579
 

補足:
今回のエラーは、SSMS より "データ層アプリケーションの抽出" や "データ層アプリケーションのエクスポート" を実施した際にも発生する可能性のあるエラーです。
対処策は同様ですので、最新のサービスパックを適用した SSMS を使用してください。

なお、2013年7月31日時点での SQL Server 2012 の最新のサービスパックは、Service Pack 1 です。