【发布时间】:2019-02-26 11:55:32
【问题描述】:
以下查询返回当前数据库的名称:
USE [DB1]
SELECT DB_NAME() AS Current_DB
FROM [dbo].[TblName]
结果:
Current_DB
----------
DB1
将DB_NAME() 与以[DBName].[SchemaName].[TblName] 表示法从表中选择的查询一起使用时,我看到了非常奇怪的结果:
T-SQL
USE [DB1]
SELECT DB_NAME() AS Current_DB
FROM [DB1].[dbo].TblName
UNION
SELECT DB_NAME() AS Current_DB
FROM [DB2].[dbo].TblName
UNION
SELECT DB_NAME() AS Current_DB
FROM [DB3].[dbo].TblName
UNION
SELECT DB_NAME() AS Current_DB
FROM [DB4].[dbo].TblName
结果:
Current_DB
----------
DB1
T-SQL
USE [DB1]
SELECT DB_NAME() AS Current_DB
FROM [DB1].[dbo].TblName
UNION ALL
SELECT DB_NAME() AS Current_DB
FROM [DB2].[dbo].TblName
UNION ALL
SELECT DB_NAME() AS Current_DB
FROM [DB3].[dbo].TblName
UNION ALL
SELECT DB_NAME() AS Current_DB
FROM [DB4].[dbo].TblName
结果:
Current_DB
----------
DB1
DB1
DB1
... (632,788 rows of DB1 !!!)
即使我从 T-SQL 查询中省略 USE [DB1],我也会得到相同的结果 - 在 SSMS 的查询目标下拉菜单中选择的数据库是出现在结果中的数据库。
如何使用[DBName].[SchemaName].[TblName] 格式在多个查询中获得正确的DB_NAME()?
【问题讨论】:
-
如你所说
returns the name of the current database。不是 FROM 子句中表的数据库。 -
你想要达到什么目的?当您使用 [DB1].[dbo].TraceContactSource 时,您已经知道数据库名称
-
你不能。让
DB_NAME()返回您想要的名称的唯一方法是先执行use [dbname]。如果你能做到这一点,你已经有了名字......
标签: sql sql-server tsql sql-server-2008 sql-server-2012