卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

sql中如何調(diào)用另一臺(tái)服務(wù)器的數(shù)據(jù)庫查詢數(shù)據(jù)呢?

sql 中如何調(diào)用另一臺(tái)服務(wù)器的數(shù)據(jù)庫查詢數(shù)據(jù)呢?建立鏈接服務(wù)器, 然后查詢時(shí)使用完整路徑servername.dbname.schemaname.objectnamesp_addlinkedserv

sql 中如何調(diào)用另一臺(tái)服務(wù)器的數(shù)據(jù)庫查詢數(shù)據(jù)呢?

建立鏈接服務(wù)器, 然后查詢時(shí)使用完整路徑servername.dbname.schemaname.objectnamesp_addlinkedserver

@server='CARDSRV',@srvproduct='',@catalog='iHRP',@provider='SQLOLEDB',@provstr='DRIVER={SQL Server};Initial Catalog=iHRP;SERVER=192.168.0.32;UID=sa;PWD=;'其中@server名稱隨便取,@catalog為數(shù)據(jù)庫名,@provider為數(shù)據(jù)庫驅(qū)動(dòng),@provstr為連接字符串然后使用sp_linkedservers,查看此服務(wù)器是否已經(jīng)成功注冊(cè)為鏈接服務(wù)器,如果已經(jīng)注冊(cè)成功,則使用EXEC sp_addlinkedsrvlogin 'CARDSRV','false' ,注冊(cè)login 帳號(hào),然后你就可以執(zhí)行一個(gè)Sql 語句,試試看看是否可以從鏈接服務(wù)器中操作數(shù)據(jù)了,select top 10 * from CARDSRV.iHRP .dbo.Dept_Class就是從剛才我設(shè)置的鏈接服務(wù)器TEST 中的一個(gè)表:Dept_Class中查詢數(shù)據(jù)。用openrowset 連接遠(yuǎn)程SQL 或插入數(shù)據(jù)

--如果只是臨時(shí)訪問, 可以直接用openrowset

--查詢示例

select * from openrowset('SQLOLEDB', 'sql服務(wù)器名'; '用戶名'; '密碼', 數(shù)據(jù)庫名.dbo. 表名)

--導(dǎo)入示例

select * into 表 from openrowset('SQLOLEDB' ,'sql服務(wù)器名';' 用戶名';' 密碼' ,數(shù)據(jù)庫名.dbo. 表名)

--創(chuàng)建鏈接服務(wù)器

exec sp_addlinkedserver 'srv_lnk', '', 'SQLOLEDB','遠(yuǎn)程服務(wù)器名或ip 地址'

exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用戶名',' 密碼'

go

--查詢示例

select * from srv_lnk.數(shù)據(jù)庫名.dbo. 表名

--導(dǎo)入示例

select * into 表 from srv_lnk.數(shù)據(jù)庫名.dbo. 表名

--以后不再使用時(shí)刪除鏈接服務(wù)器

exec sp_dropserver 'srv_lnk','droplogins'

go

,

--下面的示例訪問來自某個(gè)表的數(shù)據(jù),該表在 SQL Server 的另一個(gè)實(shí)例中。

SELECT *FROM OPENDATASOURCE('SQLOLEDB','Data Source=ServerName;User ID=MyUID;Password=MyPass').Northwind.dbo.Categories

下面是個(gè)查詢的示例,它通過用于 Jet 的 OLE DB 提供程序查詢 Excel 電子表格。

SELECT *FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:Financeaccount.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

由于項(xiàng)目需要, 在開發(fā)過程遇上跨數(shù)據(jù)庫服務(wù)器訪問數(shù)據(jù)的問題.

在網(wǎng)絡(luò)上一搜, 資料確實(shí)不少, 不過解決自己的問題也花了大半天的時(shí)候, 在這里花些時(shí)間總結(jié)一下.

1. 確立問題

由于需要進(jìn)行跨數(shù)據(jù)庫服務(wù)器的查詢操作, 所以我個(gè)人把其定位于分布式查詢數(shù)據(jù)的問題.

2. 解決方案

第一個(gè)概念. 鏈接服務(wù)器.

鏈接服務(wù)器一般用來處理分布式查詢。當(dāng)客戶端應(yīng)用程序通過鏈接服務(wù)器執(zhí)行分布式查詢時(shí),SQL Server 將分析該命令,并向 OLE DB 發(fā)送行集請(qǐng)求。行集請(qǐng)求的形式可以是對(duì)提供程序執(zhí)行查詢或從提供程序打開基表。

分布式查詢可以訪問來自多種異類數(shù)據(jù)源的數(shù)據(jù),而這些數(shù)據(jù)可存儲(chǔ)在相同或不同的計(jì)算機(jī)上。Microsoft? SQL Server? 2000 通過使用 OLE DB(Microsoft 通用數(shù)據(jù)訪問應(yīng)用程序接口 (API) 規(guī)范)支持分布式查詢。

鏈接服務(wù)器配置允許 Microsoft? SQL Server? 對(duì)其它服務(wù)器上的 OLE DB 數(shù)據(jù)源執(zhí)行命令。鏈接服務(wù)器具有以下優(yōu)點(diǎn):

遠(yuǎn)程服務(wù)器訪問。

對(duì)整個(gè)企業(yè)內(nèi)的異類數(shù)據(jù)源執(zhí)行分布式查詢、更新、命令和事務(wù)的能力。

能夠以相似的方式確定不同的數(shù)據(jù)源。

鏈接服務(wù)器組件

,

鏈接服務(wù)器的定義指定了 OLE DB 提供程序和 OLE DB 數(shù)據(jù)源。

OLE DB 提供程序是管理特定數(shù)據(jù)源和與特定數(shù)據(jù)源進(jìn)行交互的動(dòng)態(tài)鏈接庫 (DLL)。OLE DB 數(shù)據(jù)源標(biāo)識(shí)可通過 OLE DB 訪問的特定數(shù)據(jù)庫。盡管通過鏈接服務(wù)器的定義所查詢的數(shù)據(jù)源通常是數(shù)據(jù)庫,但也存在適用于多種文件和文件格式的 OLE DB 提供程序,包括文本文件、電子表格數(shù)據(jù)和全文內(nèi)容檢索結(jié)果。下表說明了最常用于 SQL Server 的 OLE DB 提供程序和數(shù)據(jù)源示例。

OLE DB提供程序 OLE DB 數(shù)據(jù)源

用于 SQL Server 的 Microsoft OLE DB 提供程序 SQL Server 實(shí)例

用于 Jet 的 Microsoft OLE DB 提供程序 mdb 數(shù)據(jù)庫文件的路徑名

用于 ODBC 的 Microsoft OLE DB 提供程序 指向某個(gè)具體數(shù)據(jù)庫的 ODBC 數(shù)據(jù)源名稱

用于 oracle 的 Microsoft OLE DB 提供程序 指向 oracle 數(shù)據(jù)庫的 SQL*Net 別名

用于索引服務(wù)的 Microsoft OLE DB 提供程序 能夠?qū)ζ鋱?zhí)行屬性搜索或全文檢索的內(nèi)容文件

說明 SQL Server 只針對(duì)分別用于 SQL Server、Jet 、Oracle 、索引服務(wù)和 ODBC 的 Microsoft OLE DB 提供程序進(jìn)行了測(cè)試。然而,SQL Server 分布式查詢旨在與任何實(shí)現(xiàn)了必需的 OLE DB 接口的 OLE DB 提供程序一起使用。

為了使數(shù)據(jù)源能夠通過鏈接服務(wù)器返回?cái)?shù)據(jù),那個(gè)數(shù)據(jù)源的 OLE DB 提供程序 (DLL) 必須位于 SQL Server 所在的服務(wù)器上。

鏈接服務(wù)器一般用來處理分布式查詢。當(dāng)客戶端應(yīng)用程序通過鏈接服務(wù)器執(zhí)行分布式查詢時(shí),SQL Server 將分析該命令,并向 OLE DB 發(fā)送行集請(qǐng)求。行集請(qǐng)求的形式可以是對(duì)提供程序執(zhí)行查詢或從提供程序打開基表。

管理鏈接服務(wù)器的定義

設(shè)置鏈接服務(wù)器時(shí),請(qǐng)注冊(cè) SQL Server 的連接信息和數(shù)據(jù)源信息。完成注冊(cè)后,該數(shù)據(jù)源總可以用單個(gè)邏輯名稱(即實(shí)例名) 引用。

可以使用存儲(chǔ)過程或 SQL Server 企業(yè)管理器來創(chuàng)建或刪除鏈接服務(wù)器的定義。

使用存儲(chǔ)過程:

使用 sp_addlinkedserver 創(chuàng)建鏈接服務(wù)器的定義。若要查看有關(guān)給定的 SQL Server 實(shí)例中定義的鏈接服務(wù)器的信息,請(qǐng)使用 sp_linkedservers。有關(guān)更多信息,請(qǐng)參見

,

sp_addlinkedserver 和 sp_linkedservers。

使用 sp_dropserver 刪除鏈接服務(wù)器的定義。還可以使用此存儲(chǔ)過程刪除遠(yuǎn)程服務(wù)器。

使用 SQL Server 企業(yè)管理器:

使用 SQL Server 企業(yè)管理器控制臺(tái)樹和" 鏈接服務(wù)器" 節(jié)點(diǎn)(在" 安全性" 文件夾內(nèi))來創(chuàng)建鏈接服務(wù)器的定義。為鏈接服務(wù)器定義名稱、提供程序?qū)傩?、服?wù)器選項(xiàng)和安全選項(xiàng)。有關(guān)各種為不同的 OLE DB 數(shù)據(jù)源設(shè)置鏈接服務(wù)器的方式以及要使用的參數(shù)值的更多信息,請(qǐng)參見 sp_addlinkedserver。

通過右擊鏈接服務(wù)器并單擊" 屬性" 命令,可編輯鏈接服務(wù)器的定義。

通過右擊鏈接服務(wù)器并單擊" 刪除" 命令,可刪除鏈接服務(wù)器的定義。

當(dāng)對(duì)鏈接服務(wù)器執(zhí)行分布式查詢時(shí),請(qǐng)對(duì)每個(gè)要查詢的數(shù)據(jù)源指定完全合法的、由四部分組成的表名。這個(gè)由四部分組成的名稱的格式應(yīng)是:linked_server_name.catalog.schema.object_name。

眾所周知,在大型的數(shù)據(jù)庫系統(tǒng)設(shè)計(jì)中,為了提升效率,不可避免的要將不用的業(yè)務(wù)放在不同的數(shù)據(jù)實(shí)例上,因此我們使用到了鏈接服務(wù)器,鏈接服務(wù)器為大家在不同的服務(wù)之間進(jìn)行分布式數(shù)據(jù)操作提供了便利。本例子基于windows 2003操作系統(tǒng),Sql server 2000(sp4)數(shù)據(jù)庫。

首先要打開你本地服務(wù)器和遠(yuǎn)程服務(wù)器的MSDTC :

開始-->Microsoft SQL Server-->服務(wù)管理器-->選擇服務(wù)中的 Distributed Transaction Coordinator (此即DTC ),點(diǎn)擊“啟動(dòng)”按鈕,啟動(dòng)MSDTC.

打開以后,在本地服務(wù)器上注冊(cè)遠(yuǎn)程服務(wù)器的信息,創(chuàng)建linkedServer ,操作代碼如下:

exec sp_addlinkedserver 'Far_MDB','','SQLOLEDB','YOIIO005','','','MDB'

然后使用sp_linkedservers,查看此服務(wù)器是否已經(jīng)成功注冊(cè)為鏈接服務(wù)器,如果已經(jīng)注冊(cè)成功,則使用

sp_addlinkedsrvlogin 'Far_MDB','false',null,'sa','****',注冊(cè)login 帳號(hào),然后你就可以執(zhí)行一個(gè)Sql 語句,試試看看是否可以從鏈接服務(wù)器中操作數(shù)據(jù)了,

例如:

SELECT *

FROM OPENQUERY(Far_MDB, 'SELECT * FROM MDB_Member')

,

這就是從我的鏈接服務(wù)器當(dāng)中去查詢MDB_Member表的數(shù)據(jù)

備注:

1、關(guān)于鏈接服務(wù)器的詳細(xì)情況請(qǐng)參閱聯(lián)機(jī)叢書中的sp_addlinkedserver、 sp_addlinkedsrvlogin、sp_addserver、sp_dropserver、sp_serveroption、sp_linkedservers等系統(tǒng)級(jí)存儲(chǔ)過程。

2、關(guān)于此鏈接服務(wù)器的創(chuàng)建及其使用在不同環(huán)境下(全部?jī)?nèi)網(wǎng)服務(wù)器、一內(nèi)網(wǎng)一公網(wǎng)服務(wù)器、全公網(wǎng)服務(wù)器)測(cè)試,均告通過。

3、有時(shí)候在存儲(chǔ)過程中訪問鏈接服務(wù)器的時(shí)候可能會(huì)碰到如下的提示,必須要對(duì)ANSI warning 和ANSI nulls進(jìn)行設(shè)置,這時(shí)候按照如下的方法進(jìn)行設(shè)置:

設(shè)置本地?cái)?shù)據(jù)庫的屬性-->連接-->選上ANSI warning 和 ANSI nulls

如何訪問SQL Server數(shù)據(jù)庫

無論是從桌面Windows 電腦上還是在Pocket PC設(shè)備上訪問SQL Server數(shù)據(jù)庫,首先都需要建立數(shù)據(jù)庫連接。使用Visual Studio 2005開發(fā)桌面Windows 應(yīng)用時(shí),開發(fā)人員可以從服務(wù)器資源管理器中拖拉數(shù)據(jù)表到窗體上,但是.NET Compact Framework不支持?jǐn)?shù)據(jù)設(shè)計(jì)器。這意味著開發(fā)人員需要編程實(shí)現(xiàn)建立數(shù)據(jù)庫連接。.NET Compact Framework 的System.Data.SqlClient 命名空間同樣不支持跨服務(wù)器的事務(wù)和連接池。設(shè)計(jì)移動(dòng)應(yīng)用解決方案時(shí),應(yīng)該將數(shù)據(jù)庫事務(wù)限制發(fā)生在服務(wù)器上的單獨(dú)數(shù)據(jù)庫中。

因?yàn)?NET Compact Framework 的System.Data.SqlClient 命名空間不支持?jǐn)?shù)據(jù)庫連接池,所以在Pocket PC設(shè)備上建立SQL Server數(shù)據(jù)庫連接時(shí)會(huì)產(chǎn)生一定的延時(shí)。在桌面Windows 編程中,要求盡可能縮短保持與數(shù)據(jù)庫連接的時(shí)間以及減少數(shù)據(jù)庫連接次數(shù)。而在開發(fā)Pocket PC上的數(shù)據(jù)庫應(yīng)用程序時(shí),最佳策略是提前創(chuàng)建數(shù)據(jù)庫連接,并盡量在整個(gè)應(yīng)用程序生命周期內(nèi)保持?jǐn)?shù)據(jù)庫連接來減少連接次數(shù)。

下面通過設(shè)計(jì)開發(fā)一個(gè)用途廣泛的Pocket PC數(shù)據(jù)庫應(yīng)用程序,介紹如何訪問服務(wù)器端數(shù)據(jù)。這個(gè)Pocket PC應(yīng)用程序需要引用System.Data.Common 、System.Xml 和System.Data.SqlClient 命名空間。

如何用sql 語句進(jìn)行跨庫查詢

在機(jī)器B 上的數(shù)據(jù)庫database2中創(chuàng)建一個(gè)臨時(shí)表#tmp,

內(nèi)容就是機(jī)器A 上的數(shù)據(jù)庫database1里面的Table1。

如何用sql 語句完成?(不借用dts 等)

,

SQL code --創(chuàng)建鏈接服務(wù)器

exec sp_addlinkedserver 'ITSV','','SQLOLEDB',' 遠(yuǎn)程服務(wù)器名或ip 地址'

exec sp_addlinkedsrvlogin 'ITSV','false',null,'用戶名',' 密碼'

--查詢示例

select * from ITSV.數(shù)據(jù)庫名.dbo. 表名

--導(dǎo)入示例

select * into 表 from ITSV.數(shù)據(jù)庫名.dbo. 表名

--以后不再使用時(shí)刪除鏈接服務(wù)器

exec sp_dropserver 'ITSV','droplogins'

--連接遠(yuǎn)程/局域網(wǎng)數(shù)據(jù)(openrowset/openquery/opendatasource)

--1、openrowset

--查詢示例

select * from openrowset('SQLOLEDB','sql服務(wù)器名';' 用戶名';' 密碼', 數(shù)據(jù)庫名.dbo. 表名)

--生成本地表

select * into 表 from openrowset('SQLOLEDB','sql服務(wù)器名';' 用戶名';' 密碼', 數(shù)據(jù)庫名.dbo. 表名)

--把本地表導(dǎo)入遠(yuǎn)程表

insert openrowset('SQLOLEDB','sql服務(wù)器名';' 用戶名';' 密碼', 數(shù)據(jù)庫名.dbo. 表名)

select *from 本地表

--更新本地表

update b

set b.列A=a.列A

from openrowset('SQLOLEDB','sql服務(wù)器名';' 用戶名';' 密碼', 數(shù)據(jù)庫名.dbo. 表名)as a inner join

,

本地表 b

on a.column1=b.column1

--openquery 用法需要?jiǎng)?chuàng)建一個(gè)連接

--首先創(chuàng)建一個(gè)連接創(chuàng)建鏈接服務(wù)器

exec sp_addlinkedserver 'ITSV','','SQLOLEDB',' 遠(yuǎn)程服務(wù)器名或ip 地址'

--查詢

select *

FROM openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.dbo. 表名')

--把本地表導(dǎo)入遠(yuǎn)程表

insert openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.dbo. 表名')

select * from 本地表

--更新本地表

update b

set b.列B=a.列B

FROM openquery(ITSV, 'SELECT * FROM 數(shù)據(jù)庫.dbo. 表名') as a

inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset

SELECT *

FROM opendatasource('SQLOLEDB', 'Data Source=ip/ServerName;User ID=登陸名password=密碼' ).test.dbo.roy_ta

--把本地表導(dǎo)入遠(yuǎn)程表

insert opendatasource('SQLOLEDB', 'Data Source=ip/ServerName;User ID=登陸名password=密碼'). 數(shù)據(jù)庫.dbo. 表名

,

select * from 本地表

用 鏈接服務(wù)器

OPENROWSET

OPENDATASOURCE

都可以

鏈接服務(wù)器.database1.dbo.table1

鏈接服務(wù)器.database1.dbo.table1

SQL code

select * into #

from openrowset('sqloledb','ip';'sa';'','select * from pubs.dbo.jobs')

如果只是偶爾使用 就用opendatasource/openrowset 固定的頻繁使用建linked server

標(biāo)簽: