SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Data Migration Assistant の互換性レベル単位の構文チェックで使用されている機能

leave a comment

SQL Server 間のデータベース移行 / バージョンアップを実施する際のアセスメントに使用することができるツールとして Data Migration Assistant が提供されています。

DMA を使用することで環境が変更されたことによる機能互換性と、データベースの互換性レベルを変更した場合の影響を確認することができ、データベースの互換性レベルを変更した場合の影響調査には、「構文チェック」が行われています。

この構文チェックでは、「DMA に内包されているルールによるチェック」と「一般的な構文チェック」の二種類が行われているようなのですが、後者の「一般的な構文チェック」がどのように実施されているのか (どの程度網羅性があるのか) が気になったので、方式を確認してみました。

DMA の一般的な構文チェックには、ScriptDom の Parse 機能が使用されているようです。

ScriptDom のパース用のクラスは互換性レベルごとに提供が行われており、調査したい互換性レベルのクラスを使用して Parse を行うことで、構文解析をすることができます。

ScriptDom のインストール方法はいくつかあると思いますが、DMA をインストーすると同梱されていますので、これを使用して次のようなスクリプトで構文チェックを行うことができます。

$scritDomFilePath = "C:\Program Files\Microsoft Data Migration Assistant\Microsoft.SqlServer.TransactSql.ScriptDom.dll"

Add-Type -Path $scritDomFilePath
$query = @"
create procedure usp_02
as
begin
	select top 10 * from person.Address AS MERGE
end
go
"@

$errors = New-Object "System.Collections.Generic.List[Microsoft.SqlServer.TransactSql.ScriptDom.ParseError]"

$parser = New-Object Microsoft.SqlServer.TransactSql.ScriptDom.TSql150Parser($false)
$resulsts = $parser.Parse([System.IO.StringReader]::new($query), [ref]$errors)

if($errors -ne $null){
    Write-Output $errors
}

 

実行されている内容は、SSMS の解析の機能に近いのではないでしょうか。

image

Share

Written by Masayuki.Ozawa

7月 8th, 2022 at 8:44 am

Posted in DMA,SQL Server

Tagged with ,

Leave a Reply