openquery 是sql server用來與其他server互動的一種技術,通過openquery,sql server 可以直接訪問其他資料庫資源。而其他資料庫在openquery 表示式中是以linked server 存在的。
使用sp_linkedservers 可以找到當前資料庫的所有linked server. openquery的表示式可以這麼寫:
select*from
openquery([
linkedservername
],'select * from table1 where rownum < 10
')
我們在對錶進行查詢時,通常都會有傳入的引數。在openquery中使用引數和我們平時寫的資料庫語句會不會有所不同呢?對於int型別的引數,沒有什麼不同。但是,如果是字元型別的引數,比如,你要在openquery中執行如下的資料庫語句,
select*from tbl_emp where empname =
'leo
'
那麼我們就必須對這個引數進行轉義,單變雙實現字元轉義。如下,
select*from
openquery([
linkedservername
],'select * from table1 where
empname = ''leo''')
下面是乙個很好的example,可以直接拿來用。我也經常把它當乙個template。
declare@sql
varchar(1000)
declare
@organizationid
varchar(10)
select
@organizationid
= (select organization_id from myorgs where organization_name =
'mmt
')set
@sql='
select * from tablename where organization_id ='+
@organizationid
set@sql='
select * from openquery(linkedservername,
'''+
replace(@sql, '''', '''''') +
''')
'exec(@sql)
針對一些提問,我再補充說明一下為神馬會有那麼多的單引號。
--如果我們不把執行語句放入字串,那麼語句應該是:
select
*from tablename where name =
'dan'--
但是,我們需要在openquery中使用引數,所以,我們必須保留單引號。單變雙實現字元轉義。
select
*from
openquery(betsyvalves,'
select * from tablename where name =
''dan
''')
--最後,因為,我們需要使用exec去執行已經形成的command string,把上述語句變成字串語句。我們必須對''進行轉義,所以'' 就變成了'''',這就是replace的主要工作,最後語句成了:
select
*from
openquery(betsyvalves,'
select * from tablename where name =
''''
dan''''')
SQL 中OPENQUERY的使用
原文 sql 中openquery的使用 openquery 是sql server用來與其他server互動的一種技術,通過openquery,sql server 可以直接訪問其他資料庫資源。而其他資料庫在openquery 表示式中是以linked server 存在的。使用sp linked...
在pandas中使用sql
from pandasql import sqldf 查詢記憶體中的pandas資料框 pysqldf lambda q sqldf q,globals 匯入模組,自帶資料,尋找pandas資料框 from pandasql import sqldf,load meat,load births py...
在Sql中使用Try Catch
原文 在sql中使用try catch 今天在寫sql中出現了!我想在sql使用trycatch吧 哎.但是語法又記不住了 那就清楚我們的google大師吧 嘿,網上關於在sql中使用try catch的還有真不少的文章 閒話就少了 今天記錄下來以便下次使時查閱!建立錯誤日誌表 create tab...