2011-09-20 228 views
2

根据传递给存储过程的参数,我有一种情况需要从超过100个数据库中的一个(全部使用完全相同的模式)获取数据。动态SQL - 根据参数查询不同的数据库

我一直在努力做到这一点的方法是建立一个动态的SQL语句sp_executesql执行:

(这只是一个测试脚本BTW):

declare @sql nvarchar(1000) 
set @sql = 'select top 10 * from [SERVER][email protected][LL]' 
exec sp_executesql @sql, N'@dbName nvarchar(50)', @dbName = N'[TheDatabase1]' 

这使错误Incorrect syntax near '@dbName'.

有没有其他的选择,我可以考虑?

PS - 数据库模式不在我的控制之内。

回答

3

您无法参数化数据库名称 - 您需要直接连接它。

set @sql = 'select top 10 * from [SERVER].' + N'[TheDatabase1]' + '.dbo.[LL]' 

Here非常好(虽然冗长)文章关于动态SQL,由厄兰Sommarskog。

+0

我认为可能是这样的 - 我只是担心查询计划会重复。有没有办法解决? –

+0

@大卫 - 看到这些是不同的数据库,我会期望不同的查询计划。除了通过串联动态构建它们之外,我不相信有任何解决方法。阅读文章 - 它可能会给你一些想法。 – Oded