2010-03-17 58 views
3

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

我试图构建使用存储在配置表数据库名称的功能内的动态查询字符串,但:

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

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

TIA。

回答

3

我真的会建议你解决固定的数据库名称,所以你可以避免使用动态sql的整个问题。你不能拿出独特的数据库名称:your_company_name_XYZyour_company_name_ABC?如果这不是一个选项,你会做很多动态SQL,你应该阅读The Curse and Blessings of Dynamic SQL by Erland Sommarskog

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

+0

感谢您的澄清和链接,我会读它。 – 2010-03-17 13:29:28

+0

关于独特的数据库名称,这将是一个好主意,但我不认为他们想要更改现有的数据库名称,因为这是次要功能的一部分(即不是应用程序的关键部分)。 – 2010-03-17 13:35:32

相关问题