MSSQL - 在同一服务器上连接不同数据库中的表

时间:2014-08-14 20:29:43

标签: sql-server join sqlsrv

我在同一台服务器上有两个不同数据库的表。 我想输出差异。

Database 1: dbo.employees
Table: employees

id        name       
---       ---- 
1          John  
2          Ringo
3          Paul
4          George


Database 2: dbo.timecard
Table: time

timeid    timename       
---       ---- 
1          John  
2          Ringo
3          Paul

期望的输出:

resultid  resultname       
  ---       ---- 
   4       George

我已设置连接信息:

<?PHP   
$serverName = "server";
$UID = "dbuser";
$PWD = "dbpass";
$Database1 = "employees";
$Database2 = "timecard";

$connectionOptions1 = array("Database"=>$Database1, "UID"=>$UID, "PWD"=>$PWD);
$connectionOptions2 = array("Database"=>$Database2, "UID"=>$UID, "PWD"=>$PWD);

$conn1 = sqlsrv_connect( $serverName, $connectionOptions1);
$conn2 = sqlsrv_connect( $serverName, $connectionOptions2);

if( $conn === false ) 
var_dump(sqlsrv_errors());
?>

并创建了2个查询:

<?PHP
$EmployeeSelect = sqlsrv_query($conn1,"SELECT * FROM dbo.employees ORDER BY name");
 WHILE ($EmployeeFetch=sqlsrv_fetch_array($EmployeeSelect, SQLSRV_FETCH_ASSOC)){
ECHO $EmployeeFetch['name']." / ".$EmployeeFetch['id'];
ECHO "<BR>";
 }
?>

<?PHP
$TimeSelect = sqlsrv_query($conn2,"SELECT * FROM dbo.timecard ORDER BY timename");
 WHILE ($TimeFetch=sqlsrv_fetch_array($TimeSelect, SQLSRV_FETCH_ASSOC)){
ECHO $TimeFetch['timename']." / ".$TimeFetch['timeid'];
ECHO "<BR>";
 }
?>

如何在一个查询中处理2个不同的连接字符串?

3 个答案:

答案 0 :(得分:1)

您不需要多个连接字符串,因为它们位于同一台服务器上。您的连接将具有任何默认数据库。让我们说你的第二个查询需要从默认的另一个数据库中提取数据。您只需要使用3部分命名。

作为旁注,您应始终明确命名列而不是使用*。

Select * 
from MySecondDatabase.dbo.timecard

答案 1 :(得分:0)

我会将其作为单个SQL语句运行:

SELECT E.*
FROM db1.dbo.Employee E
LEFT OUTER JOIN db2.dbo.Time T
   ON E.name = T.timename
WHERE T.timename IS NULL

答案 2 :(得分:0)

SELECT id,name FROM db1.dbo.Employee
EXCEPT
SELECT timeid,timename FROM db2.dbo.Time