症状
请考虑以下情况:
-
Microsoft SQL Server 2008 R2 中有一个链接服务器。
-
链接服务器上的表具有 SMALLDATETIME 类型列。
-
运行 INSERT 或 INSERT INTO 语句,将包含 DATETIME 类型数据的记录插入表中。
在此方案中,语句失败。 此外,你还会收到以下错误消息:
链接服务器“LinkServerName ”的 OLE DB 访问接口“SQLNCLI10”返回消息“多步骤 OLE DB 操作生成错误。 检查每个 OLE DB 状态值(如果可用)。 没有完成任何工作。消息 7344,级别 16,状态 1,第 1 行链接服务器“LinkServerName”的 OLE DB 提供程序“SQLNCLI10”无法插入到表“TableName” ,因为列“ColumnName”。 转换失败,因为数据值溢出了提供程序使用的数据类型。
原因
出现此问题的原因是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 类型列更改为 DATETIME 类型。