Sql server openquery转换失败,因为数据值溢出了提供程序使用的数据类型
我正在使用SQLServer2008使用链接服务器从另一台服务器获取数据Sql server openquery转换失败,因为数据值溢出了提供程序使用的数据类型,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我正在使用SQLServer2008使用链接服务器从另一台服务器获取数据 SELECT * FROM OPENQUERY (METER, 'SELECT ME.Col1 ,ME."ext" AS ext ,ME."t-date" AS Date ,ME."per-id"
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”作为成员从上述查询中删除,它会给出结果并正常工作
我得到的信息是:
每个字段中的数据长度必须小于架构中描述的长度。对于定义为特定字符和数据的联系人标题,需要小于该值。-我明白这一点
我的问题是,在select查询中,我试图获取数据,但没有插入任何位置。但是,为什么字符长度不匹配呢?根据我的理解,如果我把它插入某个地方,那么可能会有问题。但只是选择不应该给问题
我只是从第三方服务器获取数据并显示。我的终端/我的数据库是否存在任何问题?如果是,如何进行
任何人都可能遇到类似的问题,以及如何解决这个问题?刚刚将SC“联系人标题”改为子字符串(SC“联系人标题”,1,14),并且成功了。注意-SUBSTR和SUBSTRING都工作正常。您可以在没有AS成员的情况下尝试
,SC.“contact title”
吗?链接服务器指向什么?另一台SQL server还是Oracle server?如果是MSSQL,如果是Oracle,请尝试在OPENQUERY本身中将T-DATE转换为DateTime。毫秒字段的长度可能太长。@Sam,请详细告诉我,您希望我如何转换它?任何查看查询的示例都有助于将(ME.“t-date”转换为DATETIME)转换为date,但只有当链接的服务器仪表是MSSQL服务器时,这才有效。你能告诉我链接服务器指向什么吗?它是Access数据库还是MSSQL数据库或Oracle数据库?它是主动/Oracle数据库。我认为,问题不在于日期。其带有“SC”。联系人名称为“作为成员”。ODBC驱动程序不允许长度大于架构指定的长度。所以我需要修剪数据值,使其小于模式指定的长度(即15)。有没有接收小于15的数据的想法?我的意思是,数据可能超过15,但是,我只会读不到15。