我们有一个 SELECT 语句,其中包含如下自定义函数调用:
SELECT
P.Identifier, P.IdentifierType,
dbo.GetBinaryData(P.Identifier, P.IdentifierType) AS BinData
FROM
Parts P
现在,由于某种原因,我们必须从 T-SQL 代码中删除显式模式(因此,从此处显示的代码中删除
dbo
)。
使用动态 SQL 和
EXEC sp_executesql
只能在 SELECT
语句之外使用,对吗?
我们已经尝试过这个:
DECLARE @SqlStmt nvarchar(4000);
DECLARE @params nvarchar(4000);
DECLARE @ret varbinary(max);
SELECT @sc = (select schema_name());
SELECT @SqlStmt= @sc + '.GetBinaryData(@Identifier,@IdentifierType)';
SELECT @params= N'@Identifier nvarchar(80), '
+ N'@IdentifierType int';
SELECT P.Identifier, P.IdentifierType, (EXEC @ret = sp_executesql @SqlStmt, @params,P.Identifier,P.IdentifierType) AS BinData
FROM Parts P
但是我收到了错误
关键字 EXEC 附近的语法不正确
有没有办法在
SELECT
语句中调用函数?
“出于某种原因,我们必须从 T-SQL 代码中删除显式模式”
不,你真的不知道。 标量 UDF 需要要调用的模式。 因此,请返回给您执行此任务的人,并告诉他们您需要标量 UDF 的例外。 建议他们将所有标量 UDF 放入单个架构中,并允许在查询中显式限定该架构。