症状
请考虑以下情况:
-
您在 Microsoft SQL Server 2008 R2 中有一个链接服务器。
-
链接服务器上有一个具有 SMALLDATETIME 类型列的表。
-
运行 insert 或 INSERT INTO 语句以将包含 DATETIME 类型数据的记录插入到表中。
在此方案中,语句失败。 此外,你还会收到以下错误消息:
链接服务器 "LinkServerName " 的 OLE DB 访问接口 "SQLNCLI10" 返回消息 "多步 OLE DB 操作生成错误"。 检查每个 OLE DB 状态值(如果可用)。 未完成任何工作。 "。Msg 7344、Level 16、State 1、Line 1The OLE DB 访问接口 "SQLNCLI10" for 链接服务器 "LinkServerName" 由于列 "ColumnName" 而无法插入表 "TableName "。 转换失败,因为数据值溢出了提供程序使用的数据类型。
原因
出现此问题的原因是 SQL Server 中的数据类型映射问题。
解决方案
累积更新信息
SQL Server 2008 R2 Service Pack 2
此问题的修补程序首次在累积更新3中发布。有关如何为 SQL Server 2008 R2 Service Pack 2 获取此累积更新包的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2754552 SQL Server 2008 R2 Service Pack 2 的累积更新包3注意 由于这些版本是累积的,因此每个新的修复版本都包含了以前的 SQL Server 2008 R2 Service Pack 2 修复版本附带的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修复版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
2730301 发布 SQL Server 2008 R2 Service Pack 2 后发布的 SQL Server 2008 R2 版本
状态
Microsoft 已经确认这是一个列于“适用范围”部分的 Microsoft 产品问题。
解决方法
要解决此问题,请使用以下方法之一:
-
将 DATETIME 类型的数据转换为语句中的 SMALLDATETIME 类型。
-
将 " SMALLDATETIME 类型" 列更改为链接服务器上的 日期时间 类型。