SQL получает данные из разных баз данных - PullRequest
0 голосов
/ 27 марта 2012

У меня есть 2 базы данных на серверах с именами db_mdone и db_mdtwo.Один из столбцов в КАЖДОЙ базе данных называется «Электронная почта».Тем не менее, обе базы данных имеют разные столбцы.Может кто-нибудь, пожалуйста, помогите мне в SQL-запросе сопоставить столбцы вместе и получить записи?Записи базы данных db_mdone будут отображаться вверху страницы, а записи других - внизу страницы.К ним не нужно присоединяться.спасибо

Ответы [ 4 ]

3 голосов
/ 27 марта 2012

Как насчет этого?

Select Email from db_mdone.dbo.firstTable 
union all
Select Email from db_mdtwo.dbo.secondTable
1 голос
/ 27 марта 2012

Основной синтаксис довольно прост: вы ставите имя таблицы и схему перед именем сервера, например,

SELECT t1.Email 
FROM db_mdone.dbo.Table1 t1
INNER JOIN db_mdtwo.dbo.Table2 t2 ON t2.Email = t1.Email

(Я не уверен, что вы имеете в виду под «сопоставлением», поэтому вам нужно разработать собственный фактический запрос.

Лучший способ сделать это, я бы сказал, это обернуть его в хранимую процедуру - вам может понадобиться использовать sp_addlinkeddserver, чтобы связать второй сервер с первым, предполагая, что ваша строка подключения - db_mdone

sp_addlinkedserver 'db_mdtwo'
0 голосов
/ 31 марта 2012

вы не упомянули имена таблиц.Вы сказали, что one of the columns in each DATABASE называется электронной почтой.Я полагаю, что у вас есть таблица посередине:)

Тем не менее, все представленные решения не имеют отношения к вашему последнему утверждению: The records of db_mdone database is going to show at the top of the page and the records of the other is going to show at the bottom of the page

Опять же, я полагаю, что этимВы хотите, чтобы все записи были вместе: сначала на db_mdone, а затем на db_mdtwo.Если вы действительно хотите, чтобы они находились в разных местах страницы, вам придется выполнить два отдельных запроса и обработать их в своем приложении.

Итак, чтобы добиться этого, я предлагаю вам добавить простой целочисленный столбец к каждому выбору, чтобы вы могли использовать его для упорядочения результата:

select Email, 0 as order_column from db_mdone
UNION
select Email, 1 as order_column from db_mdtwo
ORDER BY order_column 

таким образом, все записи с 0 (db_mdone) идут в первую очередь и все записи с 1 (db_mdtwo) после

0 голосов
/ 31 марта 2012

Это не самый эффективный способ получения данных, но это начало, на котором вы можете опираться.



<html>
<body>

<%
'=============================================================
' xxx.xxx.xxx.xxx = IP Address for the SQL Server
' yyyyyyyy = User Id for the database
' zzzzzzzz = Password for the database
'=============================================================
strWebDSN = "Provider=SQLOLEDB;server=xxx.xxx.xxx.xxx;uid=yyyyyyyy;pwd=zzzzzzzz;database=db_mdone"
Set Conn  = Server.CreateObject("ADODB.Connection")
Conn.Open strWebDSN 
set rs    = Server.CreateObject("ADODB.recordset")
rs.Open "Select * from DATABASETABLENAME", conn

do until rs.EOF
        for each x in rs.Fields
             Response.Write(x.name)
             Response.Write(" = ")
             Response.Write(x.value & "<br />") 
        next
        Response.Write("<br />")
        rs.MoveNext
loop

rs.close
conn.close
%>

<hr>

<%
'=============================================================
' xxx.xxx.xxx.xxx = IP Address for the SQL Server
' yyyyyyyy = User Id for the database
' zzzzzzzz = Password for the database
'=============================================================
strWebDSN = "Provider=SQLOLEDB;server=xxx.xxx.xxx.xxx;uid=yyyyyyyy;pwd=zzzzzzzz;database=db_mdtwo"
Set Conn  = Server.CreateObject("ADODB.Connection")
Conn.Open strWebDSN 
set rs    = Server.CreateObject("ADODB.recordset")
rs.Open "Select * from DATABASETABLENAME", conn

do until rs.EOF
        for each x in rs.Fields
             Response.Write(x.name)
             Response.Write(" = ")
             Response.Write(x.value & "<br />") 
        next
        Response.Write("<br />")
        rs.MoveNext
loop

rs.close
conn.close
%>


</body>
</html>



...