1

2005年から2008年のMicrosoft SQL Serverからリンクサーバーを作成しようとしています。私は2005年のインスタンスでこれを定期的に行いますが、これはSQL 2008への長い旅の第一歩です。他のリンクサーバーとしてリンクサーバーを作成することはできますが、エラーは発生しませんが、 (例:単純な "SELECT *"ステートメント)このエラーはSSMSで発生します。2005年インスタンスのリンクされた2008 SQLサーバーの "キャスト仕様の文字値が無効です"

"リンクされたサーバー{リンクサーバー名}のOLE DBプロバイダ" SQLNCLI "が返されました"キャスト仕様の文字値が無効です""

2005インスタンスの2008インスタンスへのリンクサーバーの作成について、何を知っておく必要がありますか?

+1

「リンクサーバーを使用する」と言うと、エラーが発生した特定のT-SQLバッチまたはストアドプロシージャが実行されていますか?このエラーは、キャスト操作が失敗していることを示しています。 –

+0

私はどんなコマンドでもキャスティングを行っていません。私は 'SELECT * FROM linkedServer.database.dbo.table'がそのOLE DBエラーを返すような単純なものを実行することについて話しています。 – kscott

+0

その場合、Link Serverの定義を提供してください。 –

答えて

2

2008年に新しく追加された「地理」データ型のフィールドを持つ、テストすることを選択したテーブル、2008年のサーバーで最も重要なビジネステーブルを示します。他のテーブルこのデータ型がなくても、クエリは正しく動作します。

だから...あなたが知っているのは...「キャスト仕様の文字値が無効です」という結局です。

0

これは照合の問題である可能性があります。

サーバー、データベース、およびテーブルのレベルで照合順序が同じであることを確認します。以下のT-SQL実行detaultサーバーの照合順序を確認するには

:Databasea照合を確認するには

exec sp_helpsort 

は、次の手順を実行します。

SELECT DATABASEPROPERTYEX('DatabaseName', 'Collation') SQLCollation; 
+0

サーバとデータベース間のすべての照合が一致しています。 SERVER:Latin1 - 一般的、大文字小文字を区別しない、アクセント記号を区別する、カナ言語を区別しない、Unicodeデータの場合は幅を無視する、SQL Serverの場合は52非Unicodeデータ DB:SQL_Latin1_General_CP1_CI_AS – kscott

0

それはどちらかだ照合(私の最初の推測)、またはUnicode変換(VARCHAR対NVARCHAR)。私はジョンをアップヴォーヴするだろうが、私は十分な評判を持っていない。

0

地理フィールドを持ち、エラーが表示されないリンクサーバー上のテーブルを照会できる特別な方法はありましたか?

私はリンクされたサーバーを照会する必要がある同じ問題があり、テーブルのいくつかには地理フィールドがあり、テキストフィールドのみを選択してもエラーが発生します。私が考えることができる唯一の回避策は、テーブルへのクエリが壊れないように、新しいテーブルに地理フィールドを分割することです。

+0

地理フィールドをWell Known Text(WKT)形式に変換し、地理データ型フィールドの代わりにリンクサーバー経由で使用したビューを作成しました。これはSQL 2008ではCAST(geoLocation AS nvarchar(MAX))AS geoLocationWKT – kscott

+0

リンクサーバーを使用する場合と同じ問題はないようですが、問題を回避するためにOPENQUERYを使用しました。 例:からb.Building_Name、 s.Suite_Numberを選択 [IO] .IrvineOffice.dbo.Suite_Space S OPENQUERYから( セレクト*([IO]は、 'IrvineOffice.dbo.Building SELECT * FROM' ジョインインナー))b on s.Building_ID = b.Building_ID – TPaul

関連する問題