Sql-Server

即使對於“文本”數據類型,也會出現錯誤“字元串或二進制數據將被截斷”

  • September 10, 2016

我創建了一個連結伺服器(PostgreSQL)。當我嘗試將數據從 SQL Server 導入到連結伺服器時,出現以下錯誤:

字元串或二進制數據將被截斷

儘管我熟悉這個錯誤,但我從未遇到過文本數據類型的錯誤。我的表中只有文本數據類型。

我想知道連結伺服器有什麼限制嗎?

我創建了一個帶有文本列的測試表。當我嘗試從我的連結伺服器插入時,我不能插入超過 4000 個字元。僅出於測試目的,我這樣做了,但實際上我需要將數據從 SQL 導入 p-sql。

使用 pg admin 在 p-sql 中創建了下表

create table test_sql ( col text )

當我嘗試插入值時

insert into linkedserver.database.schema.table (col) 
values ('4001 char')

但它無法插入。

我已使用以下查詢成功創建連結伺服器:

EXEC master.dbo.sp_addlinkedserver
@server = N'Test_server',
@srvproduct=N'PostgreSQL Unicode(x64)',
@provider=N'MSDASQL',
@provstr=N'Driver=PostgreSQL Unicode(x64);uid=postgres;Server=######;database=test_db;pwd=password;SSLmode=disable;PORT=5432'

正如消息所暗示的那樣,您正試圖將數據放入一個不夠寬的列中。

IIRC Postgre 的文本列是開放大小的,就像 SQL Server 的一樣[N]VARCHAR(MAX),所以我懷疑那裡有一些長值,並且 SQL Server 中表中的目標列是更有限的字元類型(VARCHAR(50)或類似的。

不過,這只是一個猜測。如果沒有您提供的更多詳細資訊,我們將無法再具體化。Postgres 和 SQL Server 中的表定義是什麼?您使用什麼工具來遷移數據(SSIS、普通 SQL 等?)?

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