我有一种情况需要从100多个数据库中的一个获取数据(所有数据库具有完全相同的模式),具体取决于传递给存储过程的参数。
我尝试这样做的方法是构建一个动态SQL语句来执行sp_executesql
:
(这只是一个测试脚本BTW):
declare @sql nvarchar(1000)
set @sql = 'select top 10 * from [SERVER].@dbName.dbo.[LL]'
exec sp_executesql @sql, N'@dbName nvarchar(50)', @dbName = N'[TheDatabase1]'
这会产生错误Incorrect syntax near '@dbName'.
我可以考虑其他任何选择吗?
PS - 数据库架构不在我的控制之内。
答案 0 :(得分:3)
您无法参数化数据库名称 - 您需要直接连接它。
set @sql = 'select top 10 * from [SERVER].' + N'[TheDatabase1]' + '.dbo.[LL]'
Here是关于动态SQL的非常好(虽然冗长)的文章,作者是Erland Sommarskog。