我想从我们的版本控制表中概述某个服务器的数据库及其当前版本号。
想象一下,我的数据库看起来像这样:
master (no version table)
database1.bhr.databaseVersion
version: 5
version: 6
database2.bhr.databaseVersion
version: 5
someOtherDb (no version table)
查询结果如下所示:
Name Version
database1 6
database1 5
我知道我可以先查询sys.databases中的所有数据库名称,然后通过枚举结果来构建动态查询。
但是,为了便于学习,我想知道是否可以在一个查询批次中完成所有操作。
答案 0 :(得分:1)
动态SQL是要走的路:
declare @sql nvarchar(max) = 'select '
declare @delim nvarchar(1) = ''
select @sql = @sql + @delim + 'DatabasePropertyEX(''' + name + ''', ''version'') [' + name + ']',
@delim = ','
from master.sys.databases
exec(@sql)
如果你不喜欢连接方法,你可能会使用STUFF函数,但为了这个目的,除非你在这台服务器上有数千个数据库,否则它会正常工作。