Jawaban:
Anda harus menggunakan sp_addlinkedserveruntuk membuat tautan server. Lihat dokumentasi referensi untuk penggunaan. Setelah tautan server dibuat, Anda akan membuat kueri seperti biasa, hanya memberi awalan nama database dengan server lain. YAITU:
-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
ON tab1.ID = tab2.ID
Setelah tautan dibuat, Anda juga dapat menggunakan OPENQUERYpernyataan SQL di server jarak jauh dan hanya mentransfer datanya kembali kepada Anda. Ini bisa sedikit lebih cepat, dan ini akan membiarkan server jarak jauh mengoptimalkan kueri Anda. Jika Anda menyimpan data dalam cache dalam tabel sementara (atau dalam memori) pada DB1contoh di atas, maka Anda akan dapat menanyakannya seperti bergabung dengan tabel standar. Sebagai contoh:
-- Fetch data from the other database server
SELECT *
INTO #myTempTable
FROM OPENQUERY([DB2], 'SELECT * FROM [MyDatabaseOnDB2].[dbo].[MyOtherTable]')
-- Now I can join my temp table to see the data
SELECT * FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
INNER JOIN #myTempTable tab2 ON tab1.ID = tab2.ID
Lihat dokumentasi OPENQUERY untuk melihat beberapa contoh lainnya. Contoh di atas cukup dibuat-buat. Saya pasti akan menggunakan metode pertama dalam contoh khusus ini, tetapi penggunaan opsi kedua OPENQUERYdapat menghemat waktu dan kinerja jika Anda menggunakan kueri untuk menyaring beberapa data.
Coba ini:
SELECT tab2.column_name
FROM [DB1.mdf].[dbo].[table_name_1] tab1 INNER JOIN [DB2.mdf].[dbo].[table_name_2] tab2
ON tab1.col_name = tab2.col_name
Gabungan dua tabel paling baik dilakukan oleh DBMS, jadi harus dilakukan seperti itu. Anda dapat mencerminkan tabel atau subset yang lebih kecil di salah satu database dan kemudian menggabungkannya. Orang mungkin tergoda untuk melakukan ini di server ETL seperti informatica tetapi saya kira itu tidak disarankan jika tabelnya besar.
Jika opsi tautan database tidak tersedia, rute lain yang bisa Anda ambil adalah menautkan tabel melalui ODBC ke sesuatu seperti MS Access atau laporan Crystal dan melakukan penggabungan di sana.
Mungkin nama database yang di-hardcode bukanlah pendekatan terbaik yang selalu ada dalam kueri SQL. Jadi, menambahkan sinonim akan menjadi pendekatan yang lebih baik. Tidak selalu terjadi bahwa database memiliki nama yang sama di beberapa lingkungan pementasan. Mereka mungkin terdiri dari postfix seperti PROD, UAT, SIT, QA dan sebagainya. Jadi berhati-hatilah dengan kueri kode keras dan buat mereka lebih dinamis.
Pendekatan # 1: Gunakan sinonim untuk menghubungkan tabel antar database di server yang sama.
Pendekatan # 2: Kumpulkan data secara terpisah dari setiap database dan gabungkan ke dalam kode Anda. String koneksi database Anda bisa menjadi bagian dari konfigurasi server aplikasi Anda melalui database atau file konfigurasi.
Saya mencoba kode ini di bawah dan berfungsi dengan baik
SELECT TimeTrackEmployee.StaffID
FROM dbo.tblGBSTimeCard AS GBSTimeCard INNER JOIN
TimeTrak.dbo.tblEmployee AS TimeTrackEmployee ON GBSTimeCard.[Employee Number] = TimeTrackEmployee.GBSStaffID
Anda bisa mencoba yang berikut ini:
select customer1.Id,customer1.Name,customer1.city,CustAdd.phone,CustAdd.Country
from customer1
inner join [EBST08].[Test].[dbo].[customerAddress] CustAdd
on customer1.Id=CustAdd.CustId
untuk ini cukup ikuti kueri di bawah ini
select a.Id,a.type,b.Name,b.City from DatabaseName.dbo.TableName a left join DatabaseName.dbo.TableName b on a.Id=b.Id
Di mana saya menulis nama databasename, Anda harus menentukan nama database. Jika Anda berada di database yang sama maka Anda tidak perlu menentukan nama database tetapi jika Anda berada di database lain Anda harus menyebutkan nama database sebagai jalur atau akan muncul kesalahan. Semoga saya membuat pekerjaan Anda mudah
Ketika saya mengalami kesulitan untuk bergabung dengan dua tabel tersebut, saya berhasil melakukan apa yang saya inginkan dengan membuka kedua database jarak jauh pada saat yang bersamaan. MySQL 5.6 (php 7.1) dan MySQL 5.1 lainnya (php 5.6)
//Open a new connection to the MySQL server
$mysqli1 = new mysqli('server1','user1','password1','database1');
$mysqli2 = new mysqli('server2','user2','password2','database2');
//Output any connection error
if ($mysqli1->connect_error) {
die('Error : ('. $mysqli1->connect_errno .') '. $mysqli1->connect_error);
} else {
echo "DB1 open OK<br>";
}
if ($mysqli2->connect_error) {
die('Error : ('. $mysqli2->connect_errno .') '. $mysqli2->connect_error);
} else {
echo "DB2 open OK<br><br>";
}
Jika Anda mendapatkan dua OK itu di layar, maka kedua database tersebut terbuka dan siap. Kemudian Anda dapat melanjutkan untuk melakukan kueri Anda.
$results = $mysqli1->query("SELECT * FROM video where video_id_old is NULL");
while($row = $results->fetch_array()) {
$theID = $row[0];
echo "Original ID : ".$theID." <br>";
$doInsert = $mysqli2->query("INSERT INTO video (...) VALUES (...)");
$doGetVideoID = $mysqli2->query("SELECT video_id, time_stamp from video where user_id = '".$row[13]."' and time_stamp = ".$row[28]." ");
while($row = $doGetVideoID->fetch_assoc()) {
echo "New video_id : ".$row["video_id"]." user_id : ".$row["user_id"]." time_stamp : ".$row["time_stamp"]."<br>";
$sql = "UPDATE video SET video_id_old = video_id, video_id = ".$row["video_id"]." where user_id = '".$row["user_id"]."' and video_id = ".$theID.";";
$sql .= "UPDATE video_audio SET video_id = ".$row["video_id"]." where video_id = ".$theID.";";
// Execute multi query if you want
if (mysqli_multi_query($mysqli1, $sql)) {
// Query successful do whatever...
}
}
}
// close connection
$mysqli1->close();
$mysqli2->close();
Saya mencoba melakukan beberapa penggabungan tetapi karena saya membuka kedua DB tersebut, maka saya dapat bolak-balik melakukan kueri hanya dengan mengubah koneksi $mysqli1atau$mysqli2
Ini berhasil untuk saya, saya harap ini membantu ... Cheers