2010年5月10日 星期一

MS SQL字串中的單引號要如何表示

今天協助同事處理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[單引號][單引號][單引號]

2 則留言:

  1. 大大您好...
    有關於複寫的實作,不知方便請您教一下嗎..
    我是有看旗標出的那本書照作,還是失敗...
    SO...我想採遠端遙控方式,望您多加指點...
    如不嫌棄,再寫 e-mail 跟小弟告知一下
    望您多幫忙,困擾我很久的問題,在此謝謝您..
    我的 SQL 是 2008

    ddabaotw@yahoo.com.tw

    回覆刪除
  2. 複寫我只有實作過一次,也是遇到很多問題,您可以參考我先前寫的筆記
    有問題大家再討論囉!

    要遠端連線可能不太方便,因為最近公司在導入ERP,時間實在不夠用。

    Sorry!!

    回覆刪除