前言
我們經(jīng)常會(huì)遇到一個(gè)數(shù)據(jù)庫(kù)要訪問(wèn)另一個(gè)數(shù)據(jù)庫(kù),或者一臺(tái)服務(wù)器要訪問(wèn)另一臺(tái)服務(wù)器里面的數(shù)據(jù)庫(kù)。 那么這個(gè)如何實(shí)現(xiàn)的呢? 相信看完這篇文章你就懂了!
同一臺(tái)服務(wù)器跨庫(kù)訪問(wèn)實(shí)現(xiàn)
1. 首先創(chuàng)建兩個(gè)數(shù)據(jù)庫(kù)CrossLibraryTable1,CrossLibraryTable2
--創(chuàng)建CrossLibraryTable1腳本:
use master --打開(kāi)master數(shù)據(jù)庫(kù),一般的創(chuàng)建語(yǔ)句都在master中執(zhí)行.
go
if exists (select * from sysdatabases where name='CrossLibraryTable1')
drop database CrossLibraryTable1 /*檢查有沒(méi)有這個(gè)數(shù)據(jù)庫(kù),如果有就刪除它。*/
go
create database CrossLibraryTable1
on primary
(
name='CrossLibraryTable1_data', ------------ 養(yǎng)成好習(xí)慣,數(shù)據(jù)文件加_data
filename='F:\代碼存放\數(shù)據(jù)庫(kù)\CrossLibraryTable1_data.mdf', ------------ 一定要是.mdf的文件,代表主數(shù)據(jù)文件
size=5mb, --默認(rèn)數(shù)據(jù)庫(kù)大小
maxsize=100mb, --最大容量
filegrowth=1mb --增長(zhǎng)量
)
log on
(
name='CrossLibraryTable1_log', ------------ 養(yǎng)成好習(xí)慣,日志文件加_log
filename='F:\代碼存放\數(shù)據(jù)庫(kù)\CrossLibraryTable1_log.ldf', ------------ 一定要是.ldf的文件,代表日志文件
size=1mb, --默認(rèn)數(shù)據(jù)庫(kù)大小
filegrowth=10% --增長(zhǎng)量
)
--創(chuàng)建CrossLibraryTable2腳本:
use master --打開(kāi)master數(shù)據(jù)庫(kù),一般的創(chuàng)建語(yǔ)句都在master中執(zhí)行.
go
if exists (select * from sysdatabases where name='CrossLibraryTable2')
drop database CrossLibraryTable2 /*檢查有沒(méi)有這個(gè)數(shù)據(jù)庫(kù),如果有就刪除它。*/
go
create database CrossLibraryTable2
on primary
(
name='CrossLibraryTable2_data', ------------ 養(yǎng)成好習(xí)慣,數(shù)據(jù)文件加_data
filename='F:\代碼存放\數(shù)據(jù)庫(kù)\CrossLibraryTable2_data.mdf', ------------ 一定要是.mdf的文件,代表主數(shù)據(jù)文件
size=5mb, --默認(rèn)數(shù)據(jù)庫(kù)大小
maxsize=100mb, --最大容量
filegrowth=1mb --增長(zhǎng)量
)
log on
(
name='CrossLibraryTable2_log', ------------ 養(yǎng)成好習(xí)慣,日志文件加_log
filename='F:\代碼存放\數(shù)據(jù)庫(kù)\CrossLibraryTable2_log.ldf', ------------ 一定要是.ldf的文件,代表日志文件
size=1mb, --默認(rèn)數(shù)據(jù)庫(kù)大小
filegrowth=10% --增長(zhǎng)量
)
然后,執(zhí)行完腳本后,刷新一下就可以看到剛剛創(chuàng)建的數(shù)據(jù)庫(kù)了:
![](/d/20211017/e7b1539e545709886332d03b39cb6a11.gif)
2.接下來(lái)在兩個(gè)數(shù)據(jù)庫(kù)里面分別創(chuàng)建一個(gè)CrossTest1和一個(gè)CrossTest2表用于跨庫(kù)查詢(xún)
--創(chuàng)建CrossTest1腳本:
use CrossLibraryTable1
create table CrossTest1(
Id int primary key identity,
Name nvarchar(20)
)
--創(chuàng)建CrossTest2腳本:
use CrossLibraryTable2
create table CrossTest2(
Id int primary key identity,
Name nvarchar(20)
)
表創(chuàng)建好后,我們?cè)偬砑訋讞l數(shù)據(jù)進(jìn)去:
use CrossLibraryTable1
insert into CrossTest1 values('跨庫(kù)1測(cè)試數(shù)據(jù)1')
insert into CrossTest1 values('跨庫(kù)1測(cè)試數(shù)據(jù)2')
use CrossLibraryTable2
insert into CrossTest2 values('跨庫(kù)2測(cè)試數(shù)據(jù)1')
insert into CrossTest2 values('跨庫(kù)2測(cè)試數(shù)據(jù)2')
切換到CrossLibraryTable1下面查詢(xún)CrossLibraryTable2的數(shù)據(jù)可以看到報(bào)如下錯(cuò)誤
![](/d/20211017/3991ab0d580970747ab5cb66927472af.gif)
修正代碼:
![](/d/20211017/d5fea41c402fdb314aa6eba897881f4d.gif)
PS:像上面那樣是可以進(jìn)行查詢(xún),然而在項(xiàng)目中使用上面的代碼格式就會(huì)引發(fā)一些問(wèn)題,那什么問(wèn)題呢?比如另一個(gè)數(shù)據(jù)庫(kù)的名稱(chēng)改變了,我們就需要把所有用到這個(gè)的地方都得改掉,這樣就很麻煩,那么有什么解決方案么,使得改一處就好了?當(dāng)然有,用數(shù)據(jù)庫(kù)同義詞就可以輕松搞定!
創(chuàng)建同義詞步驟如下:
![](/d/20211017/064e57d53dca9dd01aa4c707d2de6231.gif)
![](/d/20211017/07b656b5c07a08a9bf866361009df897.gif)
![](/d/20211017/c914502bcf171c332f93e9a8e02b4551.gif)
不同服務(wù)器跨庫(kù)訪問(wèn)實(shí)現(xiàn)
當(dāng)數(shù)據(jù)庫(kù)在不同服務(wù)器上面,用上面的方法就不行了,那如何實(shí)現(xiàn)跨服務(wù)器訪問(wèn)呢?很簡(jiǎn)單,看下面↓↓↓
![](/d/20211017/0692c22c5cc1730a9bda0ef0bb08724a.gif)
![](/d/20211017/ea33cfe46caa1640a17a761a8228ef74.gif)
![](/d/20211017/f830b76661d91779fdc7aa08306c84da.gif)
![](/d/20211017/9f82dd823fd4461e5bd62ea56aa365d7.gif)
好了,SQL Server跨庫(kù)跨服務(wù)器訪問(wèn)實(shí)現(xiàn)就到這了,如果按照步驟一步一步操作的話(huà),相信您也已經(jīng)實(shí)現(xiàn)了,下一篇文章就來(lái)談?wù)劮謳?kù)分表實(shí)現(xiàn)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
您可能感興趣的文章:- SQLServer 跨庫(kù)查詢(xún)實(shí)現(xiàn)方法
- SQL Server 跨庫(kù)同步數(shù)據(jù)
- MSSQLSERVER跨服務(wù)器連接(遠(yuǎn)程登錄)的示例代碼