如何基于不同数据库中的值访问数据库? (TSQL)
所以我有一个SQL Server正在运行,并且我有两个数据库,第一个数据库存储第二个数据库的名称。在第一个数据库中,我希望创建一个在第二个表修改数据的声明中,沿着线的东西:如何基于不同数据库中的值访问数据库? (TSQL)
(这是从第一个数据库查询)
select * from [select database_name from table1].table
我一直在玩弄与系统。关键字试图找出我是否可以做到这一点,但没有运气。任何帮助将不胜感激,谢谢。
您必须构建一个字符串并将其作为动态SQL执行。请参阅:The Curse and Blessings of Dynamic SQL
declare @database_name sysname
select @database_name = database_name from Table1
declare @sql nvarchar(1000)
set @sql = N'select * from ' + @database_name + N'.SchemaName.TableName'
exec sp_executesql @sql
感谢您的参考!爱标题:) – 2011-03-14 19:51:50
你可以做到这一点只能通过执行这样的动态查询:
DECLARE @base varchar(30)
SELECT @base = "yourOtherBase"
EXECUTE ("select * from " + @base + "..table");
感谢您的信息,这完美的工作! – 2011-03-14 19:54:16
的一种方法是建立一些动态SQL,沿着线:
DECLARE @Command varchar(1000)
SELECT @Command = replace('select * from <TargetDB>.dbo.table', '<TargetDB>', tabel1.database_name)
from table1
where [your criteria here]
EXECUTE (@Command)
另一种方法是创建引用“目标”数据库的视图(或同义词或链接的服务器定义),例如
DECLARE @Command varchar(1000)
SELECT @Command = replace('CREATE VIEW SomeView AS select * from <TargetDB>.dbo.table', '<TargetDB>', tabel1.database_name)
from table1
where [your criteria here]
EXECUTE (@Command)
这将创建一个可以被永久(即非动态)代码引用的视图。如果目标数据库频繁更改,或者您拥有大量目标数据库,则这种方法效果不佳。
但说实话,真正的答案是不,你不能轻易做到这一点,而且你应该尽力避免必须这样做的情况。相信我,这可能是一个调试和维护的噩梦。
@Joe是对的,如果你这样去使用'sp_executeSQL'。 – 2011-03-14 19:53:13
如果您发布代码,XML或数据示例,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”),以便对其进行精确格式化和语法突出显示! – 2011-03-14 19:49:44