动态SQL - 根据参数查询不同的数据库
我遇到一种情况,我需要根据传递给存储过程的参数从 100 多个数据库(全部具有完全相同的架构)之一获取数据。
我一直在尝试执行此操作的方法是构建一个动态 SQL 语句以使用 sp_executesql
执行:(
这只是一个测试脚本顺便说一句):
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]'
这给出了错误 Incord Syntax near ' @dbName'.
我还可以考虑其他选择吗?
PS - 数据库模式不在我的控制范围内。
I have a situation where I need to get data from one of over 100 database (all with the exact same schema) depending on a parameter passed to a stored procedure.
The way I've been trying to do this is to build a dynamic SQL statement to execute with sp_executesql
:
(This is just a test script 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]'
This gives the error Incorrect syntax near '@dbName'.
Is there any other option I might consider?
PS - the database schema is not within my control.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您无法参数化数据库名称 - 您需要直接连接它。
这里是一篇关于动态 SQL 的非常好的(虽然很长)文章,作者是 Erland Sommarskog。
You cannot parameterize the database name - you will need to concatenate it directly.
Here is very good (though lengthy) article about dynamic SQL, by Erland Sommarskog.