儲存過程呼叫不同資料庫的資料
儲存過程呼叫不同資料庫的資料
在儲存過程呼叫不同資料庫的資料該如何做,比如在儲存過程名為AAA的儲存過程裡面呼叫資料庫為hudu1,hudu2,hudu3裡面的資料來統計?
在同一臺資料庫伺服器上:
select * from hudu1.dbo.表名
select * from hudu2.dbo.表名
select * from hudu3.dbo.表名
在不同資料庫伺服器上:
select * from openrowset('SQLOLEDB','sql伺服器1';'使用者名稱';'密碼',hudu1.dbo.表名)
select * from openrowset('SQLOLEDB','sql伺服器2';'使用者名稱';'密碼',hudu2.dbo.表名)
select * from openrowset('SQLOLEDB','sql伺服器3';'使用者名稱';'密碼',hudu3.dbo.表名)
在同一臺資料庫伺服器上:
select * from hudu1.dbo.表名
select * from hudu2.dbo.表名
select * from hudu3.dbo.表名
在不同資料庫伺服器上:
select * from openrowset('SQLOLEDB','sql伺服器1';'使用者名稱';'密碼',hudu1.dbo.表名)
select * from openrowset('SQLOLEDB','sql伺服器2';'使用者名稱';'密碼',hudu2.dbo.表名)
select * from openrowset('SQLOLEDB','sql伺服器3';'使用者名稱';'密碼',hudu3.dbo.表名)
下面的方法可以參考:
方法一:用OPENDATASOURCE 方法去操作異地資料庫
declare @i int
set @i=1
select * from OPENDATASOURCE('SQLOLEDB','Data Source=IP地址;User ID=sa;Password=密碼').異地資料庫名.dbo.表名 A inner join 本地資料庫名..表名 B
on A.關聯欄位=B.關聯欄位 and A.欄位名稱
--方法二:如果經常訪問或資料量大,建議用連結伺服器
--建立連結伺服器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','遠端伺服器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'使用者名稱','密碼'
go
--查詢示例
select * from srv_lnk.資料庫名.dbo.表名
--匯入示例
select * into 表 from srv_lnk.資料庫名.dbo.表名
go
--以後不再使用時刪除連結伺服器
exec sp_dropserver 'srv_lnk','droplogins'
--如果只是臨時訪問,可以直接用openrowset
--查詢示例
select * from openrowset('SQLOLEDB'
,'sql伺服器名';'使用者名稱';'密碼'
,資料庫名.dbo.表名)
--匯入示例
select * into 表 from openrowset('SQLOLEDB'
,'sql伺服器名';'使用者名稱';'密碼'
,資料庫名.dbo.表名)
方法一:用OPENDATASOURCE 方法去操作異地資料庫
declare @i int
set @i=1
select * from OPENDATASOURCE('SQLOLEDB','Data Source=IP地址;User ID=sa;Password=密碼').異地資料庫名.dbo.表名 A inner join 本地資料庫名..表名 B
on A.關聯欄位=B.關聯欄位 and A.欄位名稱
--方法二:如果經常訪問或資料量大,建議用連結伺服器
--建立連結伺服器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','遠端伺服器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'使用者名稱','密碼'
go
--查詢示例
select * from srv_lnk.資料庫名.dbo.表名
--匯入示例
select * into 表 from srv_lnk.資料庫名.dbo.表名
go
--以後不再使用時刪除連結伺服器
exec sp_dropserver 'srv_lnk','droplogins'
--如果只是臨時訪問,可以直接用openrowset
--查詢示例
select * from openrowset('SQLOLEDB'
,'sql伺服器名';'使用者名稱';'密碼'
,資料庫名.dbo.表名)
--匯入示例
select * into 表 from openrowset('SQLOLEDB'
,'sql伺服器名';'使用者名稱';'密碼'
,資料庫名.dbo.表名)
錯誤7405:異類查詢要求為連線設定ANSI-NULL和ANSI-WARNNINGS選項,這將確保一致的查詢語意,請啟用這些選項,然後重新發出查詢
解決方法:
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
CREATE PROCEDURE ....
解決方法:
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON
GO
CREATE PROCEDURE ....
SQL SERVER儲存過程中透過連結伺服器訪問遠端伺服器SQL實戰
SQLSERVER的開發中,經常會碰到跨物理伺服器跨資料庫的訪問和操作。
下面來分析下在儲存過程中建立遠端訪問的完整例子.
需求: 在A伺服器上有Card資料庫,Card資料庫有儲存過程proc_Card;
在B伺服器上有AccountDB資料庫,AccountDB下有Up_account儲存過程。
現在需要在執行proc_Card最後,呼叫一次Up_account儲存過程,以實現不同服,不同資料庫的資料同步.
分析: 1. 儲存過程中呼叫儲存過程不是問題,
Execute '儲存過程名字'
儲存過程引數1=引數1的值,
引數2=引數2的值
......
2. 如何在A服上建立對B伺服器 SQLSERVER的訪問呢?
首先不得不提的是SQLSERVER連結伺服器,在sql 2K中 企業管理器===>安全性===>連結伺服器.
SQLSERVER2005 or 2008中 Maragement studio 伺服器物件==>連結伺服器。
這個連結伺服器物件是如何來的?
預設情況下會只有本機一個,連結伺服器名就是本機機器名,透過系統儲存過程Execute sp_helpserver 可以檢視,顯示為name欄位
下面來分析下在儲存過程中建立遠端訪問的完整例子.
需求: 在A伺服器上有Card資料庫,Card資料庫有儲存過程proc_Card;
在B伺服器上有AccountDB資料庫,AccountDB下有Up_account儲存過程。
現在需要在執行proc_Card最後,呼叫一次Up_account儲存過程,以實現不同服,不同資料庫的資料同步.
分析: 1. 儲存過程中呼叫儲存過程不是問題,
Execute '儲存過程名字'
儲存過程引數1=引數1的值,
引數2=引數2的值
......
2. 如何在A服上建立對B伺服器 SQLSERVER的訪問呢?
首先不得不提的是SQLSERVER連結伺服器,在sql 2K中 企業管理器===>安全性===>連結伺服器.
SQLSERVER2005 or 2008中 Maragement studio 伺服器物件==>連結伺服器。
這個連結伺服器物件是如何來的?
預設情況下會只有本機一個,連結伺服器名就是本機機器名,透過系統儲存過程Execute sp_helpserver 可以檢視,顯示為name欄位
如何新增連結伺服器 ?
A. 透過嚮導,
1. 右鍵連結伺服器--->新增連結伺服器
2. 輸入連結伺服器名[ 需要訪問的伺服器的機器名或是IP,如果別名無法解析到,則使用IP ] ,指定伺服器型別為SQL SERVER,
3. 在安全性中選擇'使用此安全上下文建立連線' 指定需要訪問的伺服器的SQL 登入賬號和密碼
4。點確定,重新整理連結伺服器,則可視配置的連結伺服器資訊
B. 透過系統儲存過程,
建立連結sql server伺服器,通常有兩種情況:
1. 第一種情況,產品選”sql server”
EXEC sp_addlinkedserver
@server='linkServerName',
@srvproduct = N'SQL Server'
這種情況,@server (linkServerName)就是要連結的sqlserver伺服器名或者ip地址。
2.第二種情況,訪問介面選“Microsoft OLE DB Provider Sql Server”或“Sql Native Client”
EXEC sp_addlinkedserver
@server=' linkServerName ',
@srvproduct='',
@provider='SQLNCLI',
@datasrc='sqlServerName'
這種情況,@datasrc(sqlServerName)就是要連結的實際sqlserver伺服器名或者ip地址。
3.Sql server資料庫引擎是透過上面設定的伺服器名或者ip地址訪問連結伺服器,DTC服務也是透過伺服器名或者ip地址訪問連結伺服器,所以要保證資料庫引擎和DTC都能透過伺服器名或者ip地址訪問到連結伺服器。
建立了連結,建立了資料庫的登入訪問:
EXEC sp_addlinkedsrvlogin
'上面建立的連結伺服器的別名或是IP', --被訪問的伺服器別名
'false',
NULL,
'賬號', --帳號
'登入密碼' --密碼
A. 透過嚮導,
1. 右鍵連結伺服器--->新增連結伺服器
2. 輸入連結伺服器名[ 需要訪問的伺服器的機器名或是IP,如果別名無法解析到,則使用IP ] ,指定伺服器型別為SQL SERVER,
3. 在安全性中選擇'使用此安全上下文建立連線' 指定需要訪問的伺服器的SQL 登入賬號和密碼
4。點確定,重新整理連結伺服器,則可視配置的連結伺服器資訊
B. 透過系統儲存過程,
建立連結sql server伺服器,通常有兩種情況:
1. 第一種情況,產品選”sql server”
EXEC sp_addlinkedserver
@server='linkServerName',
@srvproduct = N'SQL Server'
這種情況,@server (linkServerName)就是要連結的sqlserver伺服器名或者ip地址。
2.第二種情況,訪問介面選“Microsoft OLE DB Provider Sql Server”或“Sql Native Client”
EXEC sp_addlinkedserver
@server=' linkServerName ',
@srvproduct='',
@provider='SQLNCLI',
@datasrc='sqlServerName'
這種情況,@datasrc(sqlServerName)就是要連結的實際sqlserver伺服器名或者ip地址。
3.Sql server資料庫引擎是透過上面設定的伺服器名或者ip地址訪問連結伺服器,DTC服務也是透過伺服器名或者ip地址訪問連結伺服器,所以要保證資料庫引擎和DTC都能透過伺服器名或者ip地址訪問到連結伺服器。
建立了連結,建立了資料庫的登入訪問:
EXEC sp_addlinkedsrvlogin
'上面建立的連結伺服器的別名或是IP', --被訪問的伺服器別名
'false',
NULL,
'賬號', --帳號
'登入密碼' --密碼
接下來就可以透過連結伺服器來訪問伺服器B的AccountDB庫下up_account儲存過程了:
Execute [連結伺服器別名].庫名.dbo.儲存過程
Execute [連結伺服器別名].庫名.dbo.儲存過程
工作似乎已經結束了,但此時發現,執行存A服儲存過程時會報 '未將[所用到的別名] 伺服器配置為可用的RPC' ,如何解決?
很簡單,檢視連結伺服器的選項,將RPC RPC_Out 值由False 改為 TRUE 再除錯,成功!
也有情況在這裡無法更改,解決方案是:
exec sp_configure 'show advanced options', 1; --預設是0
GO
RECONFIGURE WITH OVERRIDE;
GO
很簡單,檢視連結伺服器的選項,將RPC RPC_Out 值由False 改為 TRUE 再除錯,成功!
也有情況在這裡無法更改,解決方案是:
exec sp_configure 'show advanced options', 1; --預設是0
GO
RECONFIGURE WITH OVERRIDE;
GO
儲存過程呼叫不同資料庫的資料_SQL SERVER儲存過程中透過連結伺服器訪問遠端伺服器SQL實戰_SQLSERVER跨平臺資料訪問
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22392018/viewspace-750745/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫儲存過程資料庫儲存過程
- 【資料庫】資料庫儲存過程(一)資料庫儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- 資料庫設計:儲存過程資料庫儲存過程
- 通過EFCore呼叫GBase8s資料庫儲存過程資料庫儲存過程
- 淺談資料庫中的儲存過程資料庫儲存過程
- 資料庫許可權-儲存過程資料庫儲存過程
- 資料庫設計:儲存過程主體資料庫儲存過程
- Mysql 資料庫水平分表 儲存過程MySql資料庫儲存過程
- 資料庫開發---常用物件-儲存過程資料庫物件儲存過程
- 批量插入資料的儲存過程儲存過程
- 儲存過程返回資料集儲存過程
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- sqlserver資料庫還原儲存過程指令碼SQLServer資料庫儲存過程指令碼
- 頭歌資料庫實驗六:儲存過程資料庫儲存過程
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- MySQL的寫入資料儲存過程MySql儲存過程
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- 殺死所有的指定資料庫的程式的儲存過程資料庫儲存過程
- 呼叫儲存過程儲存過程
- SQL Server 資料備份儲存過程SQLServer儲存過程
- 通用的SQL Server資料庫查詢分頁儲存過程SQLServer資料庫儲存過程
- 【故障公告】1個儲存過程拖垮整個資料庫儲存過程資料庫
- MyBatis(八) 資料庫BLOB讀寫、批量更新操作、儲存過程呼叫、分表、分頁MyBatis資料庫儲存過程
- 資料儲存(1):從資料儲存看人類文明-資料儲存器發展歷程
- 從根源揭祕HashMap的資料儲存過程HashMap儲存過程
- 儲存崩潰資料恢復過程;資料恢復案例資料恢復
- Mysql資料庫建立儲存過程實現往資料表中新增欄位的方法MySql資料庫儲存過程
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- 查詢當前資料庫存在某個字串的儲存過程資料庫字串儲存過程
- Mysql使用儲存過程快速新增百萬資料MySql儲存過程
- Winform呼叫儲存過程ORM儲存過程
- perl呼叫儲存過程儲存過程
- jdbc呼叫儲存過程JDBC儲存過程
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 恢復MySQL資料庫建立儲存過程是遇到錯誤MySql資料庫儲存過程
- 金倉資料庫KingbaseES儲存過程 RETURN語句資料庫儲存過程
- 列式儲存資料庫資料庫