动态SQL - 根据参数查询不同的数据库

时间:2011-09-20 10:03:01

标签: sql sql-server tsql dynamic-sql

我有一种情况需要从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 - 数据库架构不在我的控制之内。

1 个答案:

答案 0 :(得分:3)

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

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

Here是关于动态SQL的非常好(虽然冗长)的文章,作者是Erland Sommarskog。