从字段中获取数据库名称?

时间:2014-04-24 11:39:19

标签: sql sql-server-2012

目前要从同一个查询中引用多个数据库,我们这样做

DatabaseName.Tablename.Column

我想知道你是否可以从字段中引用数据库名称。原因是有时会有数百个这样的引用,并且在为客户创建新实例时,数据库名称总是略有不同,因此必须更新这些实例。

我期待的是这样的事情:

(SELECT DatabaseName FROM ConfigurationTable).TableName.ColumnName

这会起作用吗?如果是这样,你能预见到任何问题吗?

3 个答案:

答案 0 :(得分:2)

您无法使用问题中的语法。

您可以做的是使用动态SQL并根据数据库名称动态构建查询。例如:

declare @sql nvarchar(max) = (SELECT DatabaseName FROM ConfigurationTable)
set @sql = N'SELECT ColumnName FROM ' + QUOTENAME(@sql) + N'..TableName'

exec sp_executesql @sql

答案 1 :(得分:1)

您似乎拥有一个架构,每个客户都有一个单独的数据库。

为什么要在查询中包含数据库名称?只需添加use DatabaseName并根据需要运行查询。

这种架构通常会将视图,存储过程,函数,表和其他任何内容复制到每个数据库中。如果您有一个应用程序的中央“代码”或“主”数据库,那么代码通常会使用动态SQL构建查询以访问正确的数据库。

您无法在单个查询中动态引用数据库。您必须使用动态SQL。

答案 2 :(得分:0)

对数据库名称进行硬编码通常是个坏主意。现在看来你已经意识到了。

另一种方法是为引用的数据库创建链接服务器。如果需要将配置更改为其他数据库,则只需调整链接服务器的设置,而无需更改查询。

相关问题