3

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

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

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

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

TIA。

4

1 回答 1

3

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

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

于 2010-03-17T13:26:22.453 回答