如何在SQL 服务器中查询当前行的数据库名称?

How to query current row's DB name in SQL server?

TableA存在于所有4个DB中,运行这个,

Use DB1
go
select CurrentDB=DB_NAME(), * From DB1..TableA union all
select CurrentDB=DB_NAME(), * From DB2..TableA union all
select CurrentDB=DB_NAME(), * From DB3..TableA union all
select CurrentDB=DB_NAME(), * From DB4..TableA

总是得到 CurrentDB ='DB1'。当行从非 DB1 中提取时,是否有 Simple 方法来获取 DB2、3、4? 尝试避免硬编码

在每个数据库中创建相同的视图,将 returns 的值 DB_NAME() 作为列。然后,在联合中,每一行都将包含数据库名称。

试试这个

Use Master
set NOCOUNT ON;
Declare @db_name Varchar(12)
Declare @sql Varchar(1000)

Declare db_cursor CURSOR FOR 
  SELECT [name]
  FROM sys.databases Where [name] like 'DB[123456789]'

Open db_cursor

Fetch Next FROM db_cursor INTO @db_name
if @@FETCH_STATUS = 0
begin
  Select @sql = 'select ''' + @db_name + ''', * From ' + @db_name + '..TableA'
  Fetch Next FROM db_cursor INTO @db_name
  While @@FETCH_STATUS = 0
  begin
    select @sql = @sql + ' Union all select ''' + 
           @db_name + ''', * From ' +   @db_name + '..TableA'
    Fetch NEXT FROM db_cursor INTO @db_name
  end
  exec @sql
end
Close db_cursor
Deallocate db_cursor

未测试,但基本思路是获取所有匹配的数据库名称。构建 sql 语句,然后执行它。