目前要从同一个查询中引用多个数据库,我们这样做
DatabaseName.Tablename.Column
我想知道你是否可以从字段中引用数据库名称。原因是有时会有数百个这样的引用,并且在为客户创建新实例时,数据库名称总是略有不同,因此必须更新这些实例。
我期待的是这样的事情:
(SELECT DatabaseName FROM ConfigurationTable).TableName.ColumnName
这会起作用吗?如果是这样,你能预见到任何问题吗?
答案 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)
对数据库名称进行硬编码通常是个坏主意。现在看来你已经意识到了。
另一种方法是为引用的数据库创建链接服务器。如果需要将配置更改为其他数据库,则只需调整链接服务器的设置,而无需更改查询。