3

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 に関しては、私もそれほど賢くはありません。

4

0 に答える 0