SQL 在OPENQUERY中使用引數

2022-03-30 01:43:07 字數 1849 閱讀 6595

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...