从同一服务器上的四个数据库中选择同一表中的相同列

时间:2015-04-14 08:57:40

标签: sql sql-server

我有四个不同的数据库,每个数据库都有一个DB_Version表。 我想创建一个select语句来获取数据库名称,版本和updateTime 并仅显示每个数据库的最新更新。 请注意我想在我的WindowsFormApplication程序中使用它。 环境是SQL Server。

到目前为止我得到了什么。但它没有显示我想要的东西。

SELECT  DB_NAME(), Version, UpdateTime
FROM [DB_A].[dbo].[DatabaseVersion]
UNION ALL
SELECT DB_NAME(), Version, UpdateTime
FROM [DB_B].[dbo].[DatabaseVersion]
UNION ALL
SELECT DB_NAME(), Version, UpdateTime
FROM [DB_C.[dbo].[DatabaseVersion]
UNION ALL
SELECT DB_NAME(), Version, UpdateTime
FROM [DB_D].[dbo].[DatabaseVersion]
ORDER BY UpdateTime DESC
GO

任何提示或提示都将非常感激。谢谢!

3 个答案:

答案 0 :(得分:1)

您将TOP 1ORDER BY一样使用

SELECT dbname, Version, UpdateTime FROM(
    SELECT TOP 1  'DB_A' as dbname, Version, UpdateTime
    FROM [DB_A].[dbo].[DatabaseVersion]
    ORDER BY UpdateTime DESC)as tbl1
UNION ALL
SELECT dbname, Version, UpdateTime FROM(
    SELECT TOP 1  'DB_B' as dbname, Version, UpdateTime
    FROM [DB_B].[dbo].[DatabaseVersion]
    ORDER BY UpdateTime DESC)as tbl2
UNION ALL
SELECT dbname, Version, UpdateTime FROM(
    SELECT TOP 1  'DB_C' as dbname, Version, UpdateTime
    FROM [DB_C].[dbo].[DatabaseVersion]
    ORDER BY UpdateTime DESC)as tbl3
UNION ALL
SELECT dbname, Version, UpdateTime FROM(
    SELECT TOP 1  'DB_D' as dbname, Version, UpdateTime
    FROM [DB_D].[dbo].[DatabaseVersion]
    ORDER BY UpdateTime DESC)as tbl4
GO

您不能使用DB_NAME(),因为它基于连接字符串中的数据库而不是3部分命名约定中的数据库

答案 1 :(得分:1)

要查找表格中的最新条目,请使用NOT EXISTS

SELECT  DB_NAME(), Version, UpdateTime
FROM [DB_A].[dbo].[DatabaseVersion] d1
WHERE NOT EXISTS (select 1 from [DB_A].[dbo].[DatabaseVersion] d2
                  where d2. UpdateTime > d1.UpdateTime)
UNION ALL etc.

答案 2 :(得分:0)

您可以使用同义词,请查看以下链接 https://msdn.microsoft.com/en-us/library/ms187552.aspx