日期:2014-05-17  浏览次数:20417 次

通过sp_addlinkedserver链接服务器,查询包含timestamp型字段的表时,会报错,如何解决。
我通过sp_addlinkedserver语句创建一个链接服务器"RemoteServer"


执行以下查询语句,返回值正常。
select * from RemoteServer.master.dbo.spt_values  
go


但执行如下查询语句,返回错误。
select *
from RemoteServer.BB_data.dbo.my_table
go


服务器: 消息 7356,级别 16,状态 1,行 1
OLE DB 提供程序 'MSDASQL' 为列提供的元数据不一致。执行时更改了元数据信息。
OLE DB 错误跟踪[Non-interface error: Column 'my_time' (compile-time ordinal 26) of object '"BB_data"."dbo"."my_table"' was reported to have a DBCOLUMNFLAGS_ISROWVER of 0 at compile time and 512 at run time]。


经过核对,是因为my_table中有一个字段名my_time,所使用的数据类型是timestamp型。
如果从表结构中删除这个字段,查询就不会报错了。


但问题是,我现在的数据库中,所有的表中都有加了一个timestamp型字段名my_time,这个字段主要是用于防止同一条记录同时被多用户更新而特别添加的字段,绝对不能删除的。

请问如何解决这里查询报错的问题?

有人建议改用OPENQUERY,但这个实在是太不方便了。
请问使用链接服务器没办法查询含有timestamp型字段的表内容吗?


------解决方案--------------------
你是用的MYSQL? MSSQL里面的时间戳的确不好处理。
------解决方案--------------------
你换下字段类型 试下
------解决方案--------------------
你可以换成guid来确保唯一性
微软自己的很多系统表都使用的是guid

用uniqueidentifier类型 保存 用 SELECT NEWID() 取值
SQL code

IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO 
CREATE TABLE [tb]([name] uniqueidentifier)
INSERT [tb] SELECT NEWID()

SELECT * FROM [tb]