Sql-Server

查詢失敗

  • February 10, 2022

我正在通過連結伺服器執行從 SQL Server 2019(64 位)SSMS 到 AWS 上的 PostgreSQL 的查詢。其他查詢工作正常,但由於消息列,此特定查詢失敗。我的查詢如下:

SELECT * from OPENQUERY (ABC, 'SELECT id, 
                                old_message,
                                message
                                FROM actions;') 

錯誤資訊:

連結伺服器“DRIQ”的 OLE DB 提供程序“MSDASQL”返回的數據與列“的預期數據長度不匹配”

$$ MSDASQL $$。資訊’。(最大)預期數據長度為 1400,而返回的數據長度為 1510。

查詢在沒有消息列的情況下工作正常。但是當我添加消息列時,它開始給我一個上述錯誤。消息列的數據類型是 postgres db 中的 JSON。對於 ODBC,我使用的是 64 位 Unicode(x64),我的數據庫的兼容性級別是 150。那麼如何獲取 sql server 2019 中的 message(json) 列的數據?

換個驅動試試?

SQL Server 和 PostgreSQL 連結伺服器配置

您可能還想嘗試將列隱式轉換為 tsql 數據類型,即

SELECT CAST(Id AS INT) AS Id, CAST(old_message AS NVARCHAR(MAX)) AS old_message, CAST(message AS NVARCHAR(MAX)) AS message FROM OPENQUERY...

似乎 PostgreSQL 發送的數據比 SQL Server 預期的要多。我會嘗試使用 PostgreSQL 函式將數據列轉換為更廣泛的內容(即相當於 Cast 或 Convert),以便 SQL Server 不會阻塞返回的數據。

如果您將其轉換為 ,它會起作用text嗎?例如message::text

或者也許是一個大的varchar?message::varchar(8000)?

引用自:https://dba.stackexchange.com/questions/271321