在用户函数内动态访问另一个数据库中的表

发布于 2024-08-25 20:05:32 字数 434 浏览 7 评论 0原文

我在 SQL Server 中有一个用户定义的表函数,它聚合来自多个表(包括另一个数据库的几个表)的数据。这是通过在查询中对数据库名称进行硬编码来完成的,但我们希望使数据库名称可配置(因为我们的数据库通常与其他应用程序的数据库共享服务器)。

我尝试使用存储在配置表中的数据库名称在函数内部构造动态查询字符串,但是:

  1. 当我尝试 exec(@sqlStatement) SQL Server 说内部不允许执行字符串一个函数。
  2. 然后我尝试了 exec sp_executesql @sqlStatement 并创建了该函数,但是当您执行它时,SQL Server 表示在函数内部您只能运行扩展函数和过程。

所以问题是:是否可以创建一个函数或存储过程来访问另一个数据库中的表,而无需在数据库名称不同时重新创建该函数?

TIA。

I have an user defined table function in SQL Server that aggregate data from several tables including a couple of tables of another database. That is done hardcoding the name of the database in the queries, but we want to make the database name configurable (because our databases usually share the server with the databases of other applications).

I tried to construct a dynamic query string inside the function using the database name that is stored in a configuration table, but:

  1. When I tried exec(@sqlStatement) SQL Server said that execute string is not allowed inside a function.
  2. Then I tried exec sp_executesql @sqlStatement and the function was created, but when you execute it SQL Server says that inside a function you can only run extended functions and procedures.

So the question is: is possible create a function or stored procedure that access a table in another database without having to recreate the function when the database name is different?

TIA.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

颜漓半夏 2024-09-01 20:05:32

我真的建议您选择固定的数据库名称,这样您就可以避免使用动态 sql 的整个问题。您不能想出独特的数据库名称,例如:your_company_name_XYZyour_company_name_ABC 吗?如果这不是一个选项,您将执行大量动态 SQL,您应该阅读 动态的诅咒和祝福SQL by Erland Sommarskog

您在问题中提到的所有限制都是 SQL Server 函数的限制。您可以毫无问题地在存储过程中生成并执行动态 SQL。

I would really recommend that you settle on fixed database names, so you can avoid this entire problem of using dynamic sql. Can't you come up with unique database names like: your_company_name_XYZ and your_company_name_ABC? if that is not an option you will be doing lots of dynamic SQL, you should read The Curse and Blessings of Dynamic SQL by Erland Sommarskog

All of the restrictions you mention in the question are a limit of SQL Server functions. You can generate and execute dynamic SQL within a stored procedure with no problems.

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