与set Operator的兼容性错误除了两个数据库之间发送的差异

时间:2014-12-04 12:08:04

标签: sql-server tsql

我需要将我的中央数据库中的某些记录发送到子目录以用于业务目的。我们在VS2013中使用datacompare功能。但它需要很多资源。使用set运算符:除了仅发送主db中存在的记录而不发送子数据库。我使用了一个链接服务器:INSERT INTO Person(FullName,[photo],[gender],[receiptNo],[Status],[DateCreated])  选择顶部(1000)  全名,[照片],[性别],[receiptNo],[状态],[dateCreated会]


   Mylinkservername.Mydatabasename.dbo.Person    除了   选择   全名,[照片],[性别],[receiptNo],[状态],[dateCreated会]   来自人 但是我遇到了这个错误:The image data type cannot be selected as DISTINCT because it is not comparable.
没有图像的表格,它很有效。我做了很多研究,但我似乎可以很好地解决我的问题     这是我的代码:

`INSERT INTO Person(FullName,[photo],[gender],[receiptNo],[Status],[DateCreated])
 Select top(1000)
 FullName,[photo],[gender],[receiptNo],[Status],[DateCreated]

 from  
   Mylinkservername.Mydatabasename.dbo.Person 
   EXCEPT
  SELECT 
  FullName,[photo],[gender],[receiptNo],[Status],[DateCreated]
  From Person`

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

首先,不推荐使用image数据类型,不应在新开发中使用。请转而转换为nvarchar(max)varbinary(max)http://msdn.microsoft.com/en-us/library/ms187993.aspx

MSDN声明" EXCEPT返回左输入查询中不是由右输入查询输出的不同行" http://msdn.microsoft.com/en-us/library/ms188055.aspx
因为你无法比较图像,所以你可以改为对子数据库Person表进行LEFT连接,并检查sub中没有记录的位置。

INSERT INTO Person(FullName,[photo],[gender],[receiptNo],[Status],[DateCreated])
 Select top(1000)
 l.FullName,l.[photo],l.[gender],l.[receiptNo],l.[Status],l.[DateCreated]
 from  
   Mylinkservername.Mydatabasename.dbo.Person l --linked server query
   LEFT JOIN Person p --local "sub" database table
   ON l.receiptNo = p.receiptNo --or whatever the primary key column(s) is/are
WHERE p.receiptNo is null --not found in local Person table