クロスサーバの操作は何ですか?
リモートサーバ上のローカルデータベースに接続することができるクロスサーバ操作は、あなたは、このようなCRUDとして、データベースの他の側にデータベース操作を実行することができます。
なぜクロスサーバー操作
データ量の増加とともに、事業拡大のボリュームは、ビジネスニーズので、時々、異なるサーバーからのデータがクロスサーバ運用の必要性について、この時間を統合し、異なるデータベースに別のサーバーにインストールする必要があります。
クロスサーバ運用にどのようなツールがありますか?
DBLINK(データベース・リンク)、名前が示唆するだけで、電話回線のように、リンクデータベースで、我々はローカルデータベースを横断しなければならないチャネルである、テーブル内のアクセスデータ別のデータベース、ローカルデータベースには、リモートデータベースのデータベース・リンクを作成する必要がありますあなたは、ローカル・データベースのデータベース・リンクを介するなどのローカルデータベースへのアクセスなどのリモートデータベーステーブル内のデータにアクセスすることができます。
一つの方法:
SQL Serverのリモートリンクを作成します。
ローカルデータベースにログオンします - >サーバーオブジェクト - >リンクサーバー(右) - >新規リンクサーバー
2.ダイアログボックスで、適切な情報を入力します。
「セキュリティ」の左側にある3.次のページでは、他のデータベースにアカウントのパスワードを入力してください
正常に作成した後、以下のチャートは、あなたが作成したリンクサーバーを参照することができ4.「OK」
5.確認するために、他のサーバの優れたルックアップテーブルを作成しようとするには次のリンクを使用します
オリジナル住所:http://baijiahao.baidu.com/s?id=1601340639397887562&wfr=spider&for=pc
第二の方法:
同じサーバの異なるデータベース
SELECT * からデータベース名...テーブル名またはSELECT * からデータベース名.dbo。テーブル
1.リンクサーバーを作成します。
1.1リンク名を作成します
execし sp_addlinkedserverを「のLinkName 」、「」、「SQLOLEDB 」、「リモートサーバー名またはIPアドレスが」 - カスタムインスタンス名プラスを持っている「と/の例は、」
/ * 例:幹部sp_addlinkedserverを「TonyLink」、「 」、 'SQLOLEDB'、 '192.168.2.110' * /
1.2ログインを作成(またはマッピングと呼ばれるリンクサーバーのログイン名を作成します)(ただ、片道を選択してください)
Windows認証モードへ1.2.1ログイン
幹部 sp_addlinkedsrvloginが' のLinkName ' - 或幹部sp_addlinkedsrvloginが'のLinkName'、 'true'に
/ * 例如:幹部sp_addlinkedsrvloginが'TonyLink' * /
1.2.2 SQL認証では、ログオンします
execし sp_addlinkedsrvloginが' のLinkNameがある'、' falseに'、NULL、' ユーザ名'、' パスワード'
/ * sp_addlinkedsrvloginがExecの'TonyLink'、NULL、 'SA' 'をfalseに'、 '123456':例えば/ *
2.リンクサーバーのデータ操作
2.1クエリ
SELECT * からのテーブルのリンク名データベーススキーマ名名名...
/ * 例:TonyLink.LoadData.dbo.XimaAreaからSELECT * * /
データの新しいローカルテーブルに2.2リモートデータベースクエリ(テーブルはローカルに事前に存在する必要はない、それが自動的に作成されます)
SELECT * INTOテーブル名から...のLinkNameデータベーステーブルのスキーマ名名名
/ * 例:Newtb fromTonyLink.LoadData.dbo.XimaAreaに選択* / *
2.3アップデート
更新 ...のLinkNameは、データベース・スキーマ名テーブルの名前である一連のフィールド= 「値」 WHEREフィールド= 「条件」
/ * 例:ArealD 8 =更新TonyLink.LoadData.dbo.XimaArea設定領域=「中国」領域* /
2.4削除
削除 ...のLinkNameは、データベース・スキーマ名テーブルの名前であるフィールド名= 「条件」/ * 例:ArealDは= TonyLink.LoadData.dbo.XimaAreaの削除1 * /
とき、もはや使用されているリンクサーバーを削除しません
execの sp_dropserverを' リンク名'、' droplogins '
行セット関数によって3(OPENQUERY / OPENROWSET / OPENDATASOURCE)動作
3.1 OPENQUERY方法(作成したばかりのリンクサーバーを必要とします):
3.1.1クエリ
SELECT * から OPENQUERY(リンク名、' データベーススキーマ名名テーブルからSELECT * ' )
/ * たとえば:OPENQUERY(TonyLink、 'LoadData.dbo.XimaAreaからSELECT *')SELECT * FROM * /
3.1.2インポート
リモートテーブルに(ローカルテーブルは、事前の存在を必要とする)ローカルテーブルを3.1.2.1(表に2つの列の間の対応関係)
INSERT OPENQUERY(リンク名、' データベーススキーマ名名テーブルからSELECT * .. ')SELECT * からローカルテーブル
/ * 例えば:INSERT OPENQUERY(TonyLink、 'LoadData.dbo.XimaArea SELECTからエリア')TTTエリアSELECTから* /
ローカルテーブル(ローカルテーブルは、事前の存在を必要とする)(2つのテーブル間の対応の列)指定されたリモート表の列を導入3.1.2.2
私はnsert OPENQUERY(リンク名、' .. * SELECTスキーマ名データベーステーブル名の名前から' )(列、行...)SELECTカラム、カラム... からローカルテーブル/ *を例えば:選択」、(TonyLinkをOPENQUERY挿入します * (jxsName、荷受人、アドレス))」からLoadData.dbo.ximajxs jxsName、荷受人を選択、TTTアドレスから / *
3.1.3アップデート
update openquery(linkname, 'select * from 数据库名.架构名.表名') set 字段='值' where 字段='条件'
/*例如:update openquery(TonyLink, 'select * from LoadData.dbo.ximajxs') set JxsName='北京有限公司' where jxsId=10 */
3.1.4 删除
delete openquery(linkname, 'select * from 数据库名.架构名.表名') where 字段名='条件'
/*例如:delete openquery(TonyLink, 'select * from LoadData.dbo.ximajxs') where jxsId=10 */
3.2 openrowset:
3.2.1 查询
select * from openrowset('SQLOLEDB', 'SQL服务器名'; '用户名'; '密码', 数据库名.dbo.表名)
报错问题:
解决方法:
在数据库服务实例名(如图1-3,GP-PC\sql2008位置)点击鼠标右键【方面】,在窗口【查看方面】— 点击【常规】— 【方面】— 选择【外围应用配置器】,找到【AdHocRemoteQueriesEnabled】— 选择【True】— 点击【确定】
3.2.2 生成本地表
select * into 表名 from openrowset('SQLOLEDB', 'SQL服务器名'; '用户名'; '密码', 数据库名.dbo.表名)
3.2.3 把本地表导入到远程表
insert openrowset('SQLOLEDB', 'SQL服务器名'; '用户名'; '密码', 数据库名.dbo.表名)
select * from 本地表
3.2.4 更新本地表
update b
set b.address = a.area
from openrowset('SQLOLEDB', '192.168.2.110'; 'sa'; '123456', LoadData.dbo.XimaArea) as a
inner join ttt b
on a.areaid=b.areaid
3.3 opendatasource
3.3.1 查询
select * from opendatasource('SQLOLEDB', 'Data Source=192.168.2.110; uid=sa; pwd=123456').LoadData.dbo.XimaArea
4. 具体例子
if exists(select 1 from master.dbo.sysservers where srvname='linktest')
begin
exec sys.sp_droplinkedsrvlogin 'linktest', 'sa'
exec sys.sp_dropserver 'linktest'
end
exec sys.sp_addlinkedserver
@server = 'linktest', -- sysname
@srvproduct = N'', -- nvarchar(128)
@provider = N'SQLOLEDB', -- nvarchar(128)
@datasrc = N'192.168.2.110' -- nvarchar(4000)
exec sys.sp_addlinkedsrvlogin
@rmtsrvname = 'linktest', -- sysname
@useself = 'false', -- varchar(8)
@locallogin = null, -- sysname
@rmtuser = 'sa', -- sysname
@rmtpassword = '123456' -- sysname
select * from linktest.LoadData.dbo.ximalss
if exists(select 1 from master.dbo.sysservers where srvname='linktest')
begin
exec sys.sp_droplinkedsrvlogin 'linktest', 'sa'
exec sys.sp_dropserver 'linktest'
end
go
参考链接:https://www.cnblogs.com/w-y-f/archive/2012/05/07/2488474.html