如何在SELECT语句内调用无显式架构的自定义T-SQL函数?
可行解决方案
首先明确:SELECT语句中不能直接嵌套EXEC执行动态SQL,这就是你报错的核心原因。给你几个实用的解决思路:
修改用户默认架构
如果当前执行SQL的用户默认架构不是dbo,直接修改其默认架构为dbo,之后调用函数时就可以省略架构名:ALTER USER [你的用户名] WITH DEFAULT_SCHEMA = dbo; -- 之后直接调用函数 SELECT GetBinaryData(参数) FROM 目标表;创建同义词
给dbo.GetBinaryData创建一个不带架构的同义词,后续直接调用同义词即可:CREATE SYNONYM GetBinaryData FOR dbo.GetBinaryData; -- 调用方式 SELECT GetBinaryData(参数) FROM 目标表;动态SQL结合变量(单值场景)
如果必须用动态SQL,得先把函数结果存入变量,再在SELECT中使用,适合单条数据的场景:DECLARE @binaryResult VARBINARY(MAX); -- 动态执行函数并赋值 EXEC sp_executesql N'SELECT @res = GetBinaryData(参数)', N'@res VARBINARY(MAX) OUTPUT', @res = @binaryResult OUTPUT; -- 再使用变量 SELECT @binaryResult;要是需要针对表中每行调用函数,这种方法会比较繁琐,优先推荐前两种方案。
内容的提问来源于stack exchange,提问作者chrisih
相关产品推荐
相关产品推荐

