代码之家  ›  专栏  ›  技术社区  ›  Alberto Martinez

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

  •  3
  • Alberto Martinez  · 技术社区  · 15 年前

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

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

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

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

    短暂性脑缺血发作。

    1 回复  |  直到 15 年前
        1
  •  3
  •   KM.    15 年前

    我真的建议您使用固定的数据库名称,这样就可以避免使用动态SQL的整个问题。你不能想出唯一的数据库名称,比如: your_company_name_XYZ your_company_name_ABC 是吗?如果这不是一个选项,您将进行大量的动态SQL,您应该阅读 The Curse and Blessings of Dynamic SQL by Erland Sommarskog

    您在问题中提到的所有限制都是对SQL Server函数的限制。您可以在存储过程中生成和执行动态SQL,而不会出现任何问题。