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

发布于 2024-12-05 06:19:12 字数 575 浏览 1 评论 0原文

我遇到一种情况,我需要根据传递给存储过程的参数从 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

萌面超妹 2024-12-12 06:19:12

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

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

这里是一篇关于动态 SQL 的非常好的(虽然很长)文章,作者是 Erland Sommarskog。

You cannot parameterize the database name - you will need to concatenate it directly.

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

Here is very good (though lengthy) article about dynamic SQL, by Erland Sommarskog.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文