Visual Studio のデータ比較ツールによって生成されたスクリプトを実行しようとすると、エラーが発生します。Google検索しても解決策が見つかりませんでした。
これは、オフィスで試したすべての開発マシンで発生します。
ネットワーク経由でリモート サーバー インスタンスに接続している Microsoft SQL Sever Management Studio 2006 R2 内から実行しています。
- Microsoft SQL Server Management Studio 10.50.2550.0
- Microsoft 分析サービス クライアント ツール 10.50.2500.0
- Microsoft データ アクセス コンポーネント (MDAC) 6.1.7601.17514
- マイクロソフト MSXML3.0 4.0 5.0 6.0
- Microsoft Internet Explorer 9.11.9600.16476
- マイクロソフト .NET フレームワーク 2.0.50727.5472
- オペレーティング システム 6.1.7601
エラー
Msg 6506, Level 16, State 10, Line 5
Could not find method 'WRITE' for type 'Microsoft.SqlServer.Types.SqlGeography' in assembly 'Microsoft.SqlServer.Types'
SQL
http://pastebin.com/embed_iframe.php?i=R9ResyeX
テーブル列「Shape」が次のように宣言されていることに注意してください。
[Shape] [geography] NULL
生成された TSQL を修正しようとしました。http : //technet.microsoft.com/en-us/library/microsoft.sqlserver.types.sqlgeography.write%28v=sql.105%29 に従って .WRITE を .Write に変更しました。.aspx を削除し、最後から 2 つの冗長な NULL、NULL パラメータを削除しました。念のため、SQL が自動的に 16 進文字列を、メソッドが期待する BinaryWriter に変換していました。これにより、予期されたエラーが発生しました。
Msg 6564, Level 16, State 1, Line 1
The method 'Write' in class 'Microsoft.SqlServer.Types.SqlGeography' in assembly 'Microsoft.SqlServer.Types' has some invalid arguments. Value of type 'varbinary(528)' is not valid for argument number 0.
よくわかりませんが、これはコード比較ツールのバグのようで、無効な SqlGeography SQL コマンドを生成していますか?
「.WRITE」を完全に削除して = 演算子だけを残すと、TSQL が 16 進値を強制する方法のように見えます。ただし、別のエラーが発生します。
Msg 6522, Level 16, State 1, Line 13
A .NET Framework error occurred during execution of user-defined routine or aggregate "geometry":
System.IO.EndOfStreamException: Unable to read beyond the end of the stream.
System.IO.EndOfStreamException:
at System.IO.BinaryReader.FillBuffer(Int32 numBytes)
at System.IO.BinaryReader.ReadDouble()
at Microsoft.SqlServer.Types.GeoData.Read(BinaryReader r)
at SqlGeometry::.DeserializeValidate(IntPtr , Int32 , CClrLobContext* )
このエラーに触れている唯一の記事はこれです。
http://blogs.msdn.com/b/isaac/archive/2009/08/10/spatial-data-type-structure.aspx
ただし、Visual Studio がソース データ テーブルから抽出した HEX に関しては、私もそれほど賢くはありません。