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表有所有记录.
我很困惑,为什么第一次链接服务器没有返回所有记录.
这是一个长过程的示例,它将记录从链接服务器复制到本地服务器,因此我的本地数据库的记录少于链接服务器数据库.
链接服务器安全选项:
登录用户详情:
任何帮助.
Jus*_*n S -1
我也很想知道当您使用 OpenQuery 而不是四部分命名约定时是否遇到同样的问题:
SELECT * FROM OpenQuery(linkserver,'SELECT * FROM Customers where CustomerId = 1140')
Run Code Online (Sandbox Code Playgroud)
IIRC,无论如何,这应该更快......我相信这会迫使它处理链接服务器上的“where”部分,并且只返回适当的值,而不是返回整个数据集并在目的地一侧。当然,我也很确定我八岁时在奶奶家看到了不明飞行物,所以请对我的智慧持保留态度。
| 归档时间: |
|
| 查看次数: |
5737 次 |
| 最近记录: |