今天協助同事處理SQL查詢速度太慢的問題,原來的語法是:
Select * from Table_A LeftJoin OpenQuery(Another_DB_Server,'Select * from DB.dbo.Table_B') as Table_B on
(Table_A.Col_1=Tbale_B.Col_1 AND
Table_B.Col_4='D')
Where Table_A.YYMM='201005'
其中Table_A資料筆數約15萬筆,Table_B資料筆數約20萬筆,這個查詢查下去要花56秒,我看了以後直覺就是兩個大Table Join不慢才有鬼,所以我第一件事就是先減少遠端查詢的資料筆數,也就是在OpenQuery那行SQL指令作手腳,原本是:
Select * from DB.dbo.Table_B
改成:
Select * from DB.dbo.Table_B Where Col_4='D'
可是問題來了,在OpenQuery中的這段SQL指令是一個字串,前後都要用單引號包著,快兩年沒用SQL了,字串中的單引號要如何表示早就忘了,找一本SQL指令的書看半天都找不到,只好拜Google大神,一下就找到答案了,就是用兩個單引號表示,將原本的SQL指令改為:
Select * from Table_A LeftJoin OpenQuery(Another_DB_Server,'Select * from DB.dbo.Table_B Where Col_4=''D''') as Table_B on
(Table_A.Col_1=Tbale_B.Col_1)
眼花了吼!
'Select * from DB.dbo.Table_B Where Col_4=''D'''
[單引號]Select * from DB.dbo.Table_B Where Col_4=[單引號][單引號]D[單引號][單引號][單引號]
大大您好...
回覆刪除有關於複寫的實作,不知方便請您教一下嗎..
我是有看旗標出的那本書照作,還是失敗...
SO...我想採遠端遙控方式,望您多加指點...
如不嫌棄,再寫 e-mail 跟小弟告知一下
望您多幫忙,困擾我很久的問題,在此謝謝您..
我的 SQL 是 2008
ddabaotw@yahoo.com.tw
複寫我只有實作過一次,也是遇到很多問題,您可以參考我先前寫的筆記
回覆刪除有問題大家再討論囉!
要遠端連線可能不太方便,因為最近公司在導入ERP,時間實在不夠用。
Sorry!!