【发布时间】:2016-06-22 02:37:00
【问题描述】:
我正在使用 SQL Server 2008 从另一个使用链接服务器的服务器获取数据。
SELECT * FROM OPENQUERY (METER,
'SELECT
ME.Col1
,ME."ext" AS ext
,ME."t-date" AS Date
,ME."per-id" AS Person
,PE."con-id" AS Contact
,PE."add-id" AS Address
,SC."contact-title" AS Member
,SC."given" AS Giver
,SC."surname" AS lastname
FROM PU."member" ME
LEFT JOIN PU."personal" PE
ON ME."per-id" = PE."per-id"
LEFT JOIN PU."cont" SC
ON PE."contactid" = SC."contactid"
WHERE ME."t-date" IS NULL
OR ME."t-date" >= NOW()')
我收到错误:
OLE DB provider "MSDASQL" for linked server "METER" returned message "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".
Msg 7341, Level 16, State 2, Line 1
Cannot get the current row value of column "[MSDASQL].T_DATE" from OLE DB provider "MSDASQL" for linked server "METER". Conversion failed because the data value overflowed the data type used by the provider.
如果我删除 where 条件并执行它,我也会遇到同样的错误。所以我认为“日期”在这里不会造成任何问题。如果我错了,请纠正我。
但是,如果我从上述查询中删除 ,SC."contact-title" AS Member,它会给我结果并且工作正常。
我得到的信息是:
每个字段中数据的长度必须小于架构中描述的长度。对于定义为某些字符和数据的联系人标题需要小于该值。 - 我明白了。
我的问题是在选择查询中我试图获取数据并且我没有在任何地方插入。但是,为什么这个字符长度不匹配?根据我的理解,如果我将它插入某个地方,那么可能会出现问题。但只是选择不应该给出问题。
我只是从 3rd 方服务器获取数据并显示。我的最后/我的数据库有什么问题吗?如果是,怎么做?
有没有人遇到过类似的问题以及如何解决?
【问题讨论】:
-
你能在没有 AS 成员的情况下试试
,SC."contact-title"吗? -
链接服务器指向什么?另一个 SQL 服务器或 Oracle 服务器?如果是 MSSQL,请尝试在 OPENQUERY 中将 T-DATE 转换为 DateTime,如果是 Oracle,则毫秒字段的长度可能太长。
-
@Sam,您能否详细告诉我,您希望我如何转换它?查看查询的任何示例都会有所帮助吗?
-
CAST(ME."t-date" AS DATETIME) AS Date 但这只有在链接服务器 METER 是 MSSQL Server 时才有效。你能告诉我链接服务器指向什么吗?它是 Access DB、MSSQL DB 还是 Oracle DB?
-
它的主动/Oracle。我认为,问题不在于日期。它带有“SC.”contact-title“AS Member”。不知何故,ODBC 驱动程序不允许长度大于模式指定的长度。所以我需要修剪数据值以使其小于架构指定的长度(即 15)。接收小于 15 的数据的任何想法?我的意思是,数据可能超过 15,但是,我只会读取不到 15。
标签: sql-server sql-server-2008-r2