1

MS SQL Server 2012 でリンク サーバーとしてセットアップされた ODBC データ ソースがあります。このデータベース全体で、データ型が日付であるほとんどの (すべてではない) 列で、クエリを実行するたびに問題が発生します。これらの日付型の列以外の列のクエリに問題はありません。

次のクエリ:

SELECT *
FROM   OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
                                           DateLastReceipt
                                    FROM   ProductTable')

SQL Server Management Studio (2012) で次のエラー メッセージが表示されます。

メッセージ 8114、レベル 16、状態 10、行 1。データ型 DBTYPE_DBDATE を日付に変換中にエラーが発生しました。

CONVERT を使用して、次の説明に従ってデータ型を varchar に変換しようとしましたが、うまくいきませんでした (同じエラー メッセージ) 。 40ce-ae95-127ec462fbff

現在、まったく同じデータ型 (日付) の列がいくつかありますが、まったく問題はありません。たとえば、私の ProductTable には、レコードが作成された日付を示す AddedToFile という列があります。このコラムはまったく問題ありません。

誰かが提供できるどんな助けも大歓迎です。

ありがとう。

4

1 に答える 1

1

これが役立つことを願っています (私は SQL Server 2012 を使用していません)。
ODBC が db2 にリンクしている場合、サポートされていない日付範囲 (例: '0001-01-01') については、キャストする必要があります。通常、これは機能します。

SELECT * 
FROM   OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
                                       CAST(DateLastReceipt AS CHAR(10))
                                FROM   ProductTable')

結果を日付として表示したい場合は、CASE を使用して、無効な日付をデフォルトの日付に置き換えてください。

SELECT *
FROM   OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
                               ,CASE WHEN DateLastReceipt AS CHAR(10)) = ''0001-01-01''
                                       THEN CURRENT_DATE
                                     ELSE DateLastReceipt 
                                     END
                                FROM   ProductTable')

CURRENT_DATE を CURRENT_TIMESTAMP に変更する必要がある場合があります。CASE の構成は、db サーバーと要件によって異なります。

于 2012-07-16T02:27:20.297 に答える