首页 > 解决方案 > 如何从函数内部查询动态数据库名

问题描述

ALTER FUNCTION FnVersion
    (@DBName  NVARCHAR(255),
     @ID  INT)
RETURNS @TABLE TABLE (iD INT, VersionNo INT)
AS
BEGIN 
    DECLARE @SQL VARCHAR(2000)

    SET @SQL = @DBName

    SELECT @SQL = 'SELECT iD, VersionNo FROM' + @DBName + '.dbo.ConfigInfo WHERE IdValue = @ID'

    EXECUTE SQL 

    RETURN;
END

db 名称将作为输入传递,查询将在动态数据库上进行 exec SQL 语句的上述逻辑导致错误。

从动态数据库实现动态查询的方法是什么?

标签: sql-serversql-function

解决方案


您不能在 SQL 函数中使用动态 SQL。但使其成为过程的一部分,并通过远程过程调用将这些数据存储到临时表中。使用远程过程而不是远程查询性能会更好。

您可以将 INSERT INTO 与 EXEC 命令一起使用。并用您的逻辑操作临时表。这将是更好的方法。


推荐阅读