Sql server 如何使用变量作为函数名在SQL Server中调用函数?

Sql server 如何使用变量作为函数名在SQL Server中调用函数?,sql-server,tsql,Sql Server,Tsql,我想循环一系列不同的函数,并在存储过程中执行它们。例如,如果我有函数名: 功能1 功能2 功能3 我想用变量名,@fn调用每个变量,我该怎么做?我已经知道如何在@fn中存储函数并使用游标循环,但不知道如何执行它。以下是我尝试过的: declare @fn nvarchar(30) = 'Function1', @sql varchar(500); set @sql = N'select * from dbo.' + @fn + '(101)'; exec @sql; 我

我想循环一系列不同的函数,并在存储过程中执行它们。例如,如果我有函数名:

  • 功能1
  • 功能2
  • 功能3
我想用变量名,
@fn
调用每个变量,我该怎么做?我已经知道如何在
@fn
中存储函数并使用游标循环,但不知道如何执行它。以下是我尝试过的:

declare @fn nvarchar(30) = 'Function1',
        @sql varchar(500);

set @sql = N'select * from dbo.' + @fn + '(101)';

exec @sql;
我还尝试了
exec sp_executesql@sql


谢谢

要使用EXEC执行动态SQL,您必须将EXEC的参数括在括号中,否则它会认为您正在尝试执行存储过程:

exec (@sql);

要使用EXEC执行动态SQL,必须将EXEC的参数包装到括号中,否则它会认为您正在尝试执行存储过程:

exec (@sql);

您可以编写一个动态查询,并在paramater中传递该动态查询,然后调用
EXEC@parameter

请点击链接,这将有所帮助


您可以编写一个动态查询,并将该动态查询传递到paramater中,然后调用
EXEC@parameter

请点击链接,这将有所帮助


为什么不能调用函数,而忘记循环和动态?游标对性能很糟糕。我猜你的整个过程都能经受得住重写,这样就不会被光标卡住。它应该尽可能地使用基于集合的逻辑。当你尝试这样做时,发生了什么?你有错误吗?你选择了一些东西,却什么也没做。SQL确实不能以这种方式很好地工作-它需要固定的元数据,即列、数据类型等应该事先知道。重新考虑你试图做的事情,这可能会造成比你省下的麻烦多得多的麻烦。对不起,伙计们,我试图删掉所有的“多余部分”,以显示我问题的核心,显然这让问题变得更加混乱。Aleksey的建议解决了我的问题(它试图将其作为存储过程而不是函数来执行),为什么您不能调用函数,而忘记循环和动态呢?游标对性能很糟糕。我猜你的整个过程都能经受得住重写,这样就不会被光标卡住。它应该尽可能地使用基于集合的逻辑。当你尝试这样做时,发生了什么?你有错误吗?你选择了一些东西,却什么也没做。SQL确实不能以这种方式很好地工作-它需要固定的元数据,即列、数据类型等应该事先知道。重新考虑你试图做的事情,这可能会造成比你省下的麻烦多得多的麻烦。对不起,伙计们,我试图删掉所有的“多余部分”,以显示我问题的核心,显然这让问题变得更加混乱。Aleksey的建议解决了我的问题(它试图将其作为存储过程而不是函数执行),虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。-我提供的链接很清楚,有助于实现目标。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-我提供的链接是明确的,将有助于实现目标。