LINKED服务器不返回所有行

Kas*_*hif 6 sql t-sql sql-server sql-server-2005 sql-server-2008

这对我来说有点奇怪.我有脚本如下

DECLARE @maxCustId INT
SELECT @maxCustId = MAX(CustomerId) FROM Customers
SELECT * INTO #temp FROM linkserver.DB.dbo.Customers where CustomerId > @maxCustId 

-- Copy records to local db Custome table

DROP TABLE #temp
Run Code Online (Sandbox Code Playgroud)

但有时#temp不会从链接服务器获取所有记录.

就像我Max CustomerId = 1138在我的本地数据库中一样,当我在脚本上运行时,我的临时表(从链接服务器获取记录)未命中CustoemrIds 1140, 1141.链接服务器有customers upto 1160.#temp表有记录,upto 1160但错过了两个记录,即1140, 1141

我一次又一次地运行该脚本,并在第4次尝试1141在#temp表中添加的记录,但记录1140仍然缺失.

然后我在本地服务器上进行以下查询以检查链接服务器中的记录

SELECT * FROM linkserver.DB.dbo.Customers where CustomerId = 1140
Run Code Online (Sandbox Code Playgroud)

上面的查询返回没有记录.

为了验证这一点,我去了链接服务器并在我创建LINKED服务器的服务器上写了相同的查询.

-- This is the server which I am using as linked server in my local server
SELECT * FROM Customers where CustomerId = 1140
Run Code Online (Sandbox Code Playgroud)

Custoemr 1140 在db中,我确信它会在那里,但我在脚本上运行以验证它.

我回到我的本地服务器并运行此查询

SELECT * FROM linkserver.DB.dbo.Customers where CustomerId = 1140
Run Code Online (Sandbox Code Playgroud)

这次我的链接服务器返回customer 1140它之前没有返回的内容.

我再次运行整个查询,现在我的#temp表有所有记录.

我很困惑,为什么第一次链接服务器没有返回所有记录.

这是一个长过程的示例,它将记录从链接服务器复制到本地服务器,因此我的本地数据库的记录少于链接服务器数据库.

  • 链接服务器:带有SP2的SQL Server 2005 Standard
  • 本地服务器:带有SP2的SQL Server 2008 Web Edition
  • 提供者: SQL Native Client 10

链接服务器安全选项:

  • 使用安全上下文制作
  • 远程登录
  • 随着Passowrd

登录用户详情:

  • 服务器角色:public和sysadmin
  • 用户映射:sa未使用db I查询进行映射.
  • 链接服务器db经常更新
  • 查询中的任何一点都没有NOLOCK

任何帮助.

Jus*_*n S -1

我也很想知道当您使用 OpenQuery 而不是四部分命名约定时是否遇到同样的问题:

SELECT * FROM OpenQuery(linkserver,'SELECT * FROM Customers where CustomerId = 1140') 
Run Code Online (Sandbox Code Playgroud)

IIRC,无论如何,这应该更快......我相信这会迫使它处理链接服务器上的“where”部分,并且只返回适当的值,而不是返回整个数据集并在目的地一侧。当然,我也很确定我八岁时在奶奶家看到了不明飞行物,所以请对我的智慧持保留态度。