从两个不同的数据库(同一服务器)中选择2个不同表的SQL语句

时间:2015-02-03 16:34:15

标签: sql sql-server sql-server-2005

如何从同一服务器上不同数据库中的多个表中进行选择?

此外,有没有办法有一个识别标记,所以我可以看到结果来自哪里?

例如:

SELECT db1.table1.name, db2.table2.name, fromTbl
FROM db1.table1, db2.table2
WHERE db1.table1.name LIKE '%j%' OR db2.table2.name LIKE '%j%'

所以在这种情况下,我从两个不同的数据库和表中选择名称。我正在对这些名称进行通配符搜索,fromTbl会让我知道结果来自何处?

4    john smith    4    555.555.5555    table1
17   joe schmoe    17   555.555.5555    table2
11   james doe     11   555.555.5555    table1

我正在使用SQL Server 2005.感谢您的输入!

3 个答案:

答案 0 :(得分:3)

您可以使用UNION ALL并添加数据库名称,如:

SELECT [columns_list], 'db1.schema.table1.name' AS [fromTbl]
FROM db1.schema.table1
WHERE db1.schema.table1.name LIKE '%j%' 
UNION ALL
SELECT [columns_list], 'db2.schema.table2.name' AS [fromTbl]
FROM db2.schema.table2
WHERE db2.schema.table2.name LIKE '%j%'

这仅在表中的列具有相同的列类型时才会起作用(如您的示例所示),否则UNION将无法工作。

答案 1 :(得分:1)

做一个工会似乎是你最好的选择。联合将结合两个查询的结果。

select name, 'table1' as fromTbl
from db1.schema.table1
where name like '%j%'

union --or union all depending on what you want

select name, 'table2' as fromTbl
from db2.schema.table2
where name like '%j%'

答案 2 :(得分:-1)

试试这个: SELECT * FROM OPENROWSET(' SQLNCLI','服务器=您的服务器; Trusted_Connection =是;',' SELECT * FROM Table1')AS a 联盟  SELECT * FROM OPENROWSET(' SQLNCLI','服务器=另一个服务器; Trusted_Connection = yes;',' SELECT * FROM Table1')AS a