同一條SQL語句,兩次運行為何會有不同的結果
有兩個實例 MSSM1 和 MSSM2 在不同的PC上,
有一條SQL語句,訪問的表都在 MSSM2 上,
------------------------------以下為該SQL語句在MSSM1上的執行情況----------------------------
該語句在 MSSM1 的環境下執行,因為兩個實例沒有互相註冊,所以在SQL語句中,所有的table前都加了連接字串:
from OPENDATASOURCE('sqloledb','data source=10.10.10.10;user id=sa;password=xxxxx').dbname.dbo.table1
a,
OPENDATASOURCE('sqloledb','data source=10.10.10.10;user id=sa;password=xxxxx').dbname.dbo.table2 b,
……………………
最後得到的結果集有505條記錄
--------------------以下為該SQL語句在MSSM1上的執行情況------------------------
將該SQL語句COPY到MSSM2的環境下執行,因為要訪問的table都在本地,所以去掉了table前面的連接字串:
from dbname.dbo.table1
a,dbname.dbo.table2 b,
……………………
得到的結果集有560條數據!
--------------------以下為多次驗證的執行情況------------------------
嘗試多次,兩次執行的結果還是不一致,十分鬱悶,這可是同一條SQL語句,只是因為去掉了table前面的連接字串,爲什麽運行結果不一致呢。
1、我都是在SA賬號下執行的,所以不會是權限方面的問題
2、SQL語句我是複製黏貼來執行的(僅僅只是去掉table前面的連接字串),且重複過多次,所以不會是SQL語句輸錯的問題
3、我請其他同事幫我驗證,他們得到的結果跟我一樣,所以也不應該是環境的問題
最後我直接將MSSM1上執行的SQL語句直接COPY到MSSM2的環境上,這次我沒有去掉table前的連接字串,與在MSSM1上執行的結果相同,是505條記錄。
請有遇到過這種情況的大俠講解一下原因,小弟不勝感激!
------解决方案-------------------- 照理应该是不可能的,难道是排序规则的影响.
------解决方案-------------------- 或者是分布式事务方面的问题,这个确实很难定位问题到底在哪儿,只能通过尝试,发现问题。
------解决方案-------------------- 模拟一下上边环境然后测试一下不就知道了 。
------解决方案-------------------- 检查MSSM1,MSSM2的dbname数据库排序规则是否一致,
-- 2个实例各执行一次.
select @@servername 'SvrName',
name 'DBName',
collation_name
from sys.databases
where name='[数据库名]'
------解决方案-------------------- 引用:
加了order by 的結果
个人认为不会,虽然你在远程执行,但是在本机还是可以抓到在本机运行的SQL语句,单独拎出来执行看看效果。
------解决方案-------------------- 怀疑数据不是静止的喔..