जवाबों:
आपको sp_addlinkedserver
सर्वर लिंक बनाने के लिए उपयोग करना होगा । उपयोग के लिए संदर्भ प्रलेखन देखें । सर्वर लिंक स्थापित हो जाने के बाद, आप सामान्य रूप में क्वेरी का निर्माण करेंगे, बस दूसरे सर्वर के साथ डेटाबेस का नाम उपसर्ग कर रहे हैं। अर्थात:
-- FROM DB1
SELECT *
FROM [MyDatabaseOnDB1].[dbo].[MyTable] tab1
INNER JOIN [DB2].[MyDatabaseOnDB2].[dbo].[MyOtherTable] tab2
ON tab1.ID = tab2.ID
एक बार लिंक स्थापित हो जाने के बाद, आप OPENQUERY
रिमोट सर्वर पर SQL स्टेटमेंट को निष्पादित करने और केवल डेटा को आपके पास वापस स्थानांतरित करने के लिए भी उपयोग कर सकते हैं। यह थोड़ा तेज हो सकता है, और यह दूरस्थ सर्वर को आपकी क्वेरी का अनुकूलन करने देगा। यदि आप DB1
उपरोक्त उदाहरण में एक अस्थायी (या इन-मेमोरी) तालिका में डेटा को कैश करते हैं , तो आप इसे एक मानक तालिका में शामिल होने की तरह ही क्वेरी कर पाएंगे। उदाहरण के लिए:
-- 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
कुछ और उदाहरण देखने के लिए OPENQUERY के प्रलेखन की जाँच करें । ऊपर दिया गया उदाहरण बहुत ही विवादित है। मैं निश्चित रूप से इस विशिष्ट उदाहरण में पहली विधि का उपयोग करूंगा, लेकिन OPENQUERY
यदि आप अपने डेटा को फ़िल्टर करने के लिए क्वेरी का उपयोग करते हैं तो दूसरा विकल्प कुछ समय और प्रदर्शन को बचा सकता है।
इसे इस्तेमाल करे:
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
एक डीबीएमएस द्वारा दो तालिकाओं का एक संयोजन सबसे अच्छा किया जाता है, इसलिए इसे इस तरह से किया जाना चाहिए। आप डेटाबेस में से किसी एक पर छोटी तालिका या उसकी सबसेट को मिरर कर सकते हैं और फिर उनमें शामिल हो सकते हैं। हो सकता है कि ईटीएल सर्वर पर मुखबिर की तरह ऐसा करने का प्रलोभन दिया जाए, लेकिन मुझे लगता है कि टेबल के विशाल होने पर इसकी सलाह नहीं दी जा सकती।
यदि डेटाबेस लिंक का विकल्प उपलब्ध नहीं है, तो आपके द्वारा लिया जा सकने वाला एक अन्य मार्ग ओडीबीसी के माध्यम से तालिकाओं को जोड़ने के लिए है, जैसे कि एमएस एक्सेस या क्रिस्टल रिपोर्टें और वहां शामिल हों।
शायद हार्ड-कोडेड डेटाबेस नाम एसक्यूएल-क्वेरी के भीतर हमेशा सबसे अच्छा तरीका नहीं है। इस प्रकार, समानार्थी शब्द जोड़ना एक बेहतर दृष्टिकोण होगा। यह हमेशा ऐसा नहीं होता है कि डेटाबेस में कई स्टेजिंग परिवेशों में एक ही नाम होता है। वे PROD, UAT, SIT, QA और इसके बाद के पोस्टफ़िक्स द्वारा शामिल हो सकते हैं। इसलिए हार्ड-कोडेड प्रश्नों से अवगत रहें और उन्हें अधिक गतिशील बनाएं।
दृष्टिकोण # 1: समान सर्वर पर डेटाबेस के बीच तालिकाओं को जोड़ने के लिए समानार्थी शब्द का उपयोग करें।
दृष्टिकोण # 2: प्रत्येक डेटाबेस से अलग से डेटा एकत्र करें और इसे अपने कोड में शामिल करें। आपके डेटाबेस कनेक्शन के तार डेटाबेस या कॉन्फ़िगरेशन फ़ाइल के माध्यम से आपके ऐप-सर्वर कॉन्फ़िगरेशन का हिस्सा हो सकते हैं।
मैंने नीचे इस कोड की कोशिश की और यह ठीक काम कर रहा है
SELECT TimeTrackEmployee.StaffID
FROM dbo.tblGBSTimeCard AS GBSTimeCard INNER JOIN
TimeTrak.dbo.tblEmployee AS TimeTrackEmployee ON GBSTimeCard.[Employee Number] = TimeTrackEmployee.GBSStaffID
इसके लिए बस नीचे क्वेरी का पालन करें
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
जहां मैंने डेटाबेसन लिखा था, आपको डेटाबेस का नाम परिभाषित करना होगा। यदि आप एक ही डेटाबेस में हैं, तो आपको डेटाबेस नाम को परिभाषित करने की आवश्यकता नहीं है, लेकिन यदि आप अन्य डेटाबेस में हैं, तो आपको डेटाबेस के नाम को पथ के रूप में उल्लेख करना होगा या यह आपको त्रुटि दिखाएगा। आशा है कि मैंने आपका काम आसान कर दिया
जब मुझे उन दो तालिकाओं में शामिल होने में परेशानी हो रही थी, तो मैं एक ही समय में दोनों दूरस्थ डेटाबेसों को खोलकर वास्तव में वही कर रहा था जो मैं चाहता था। MySQL 5.6 (php 7.1) और दूसरा MySQL 5.1 (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>";
}
यदि आपको स्क्रीन पर वे दो ओके मिलते हैं, तो दोनों डेटाबेस खुले और तैयार हैं। फिर आप अपनी क्वेरी करने के लिए आगे बढ़ सकते हैं।
$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();
मैं कुछ जोड़-घटाव करने की कोशिश कर रहा था, लेकिन जब से मुझे वो दो DB मिल गए, तब मैं कनेक्शन बदलकर $mysqli1
या करके क्वेरी आगे-पीछे कर सकता हूं$mysqli2
यह मेरे लिए काम करता है, मुझे आशा है कि यह मदद करता है ... चीयर्स