使用特定的标量UDF

问题描述

我有一个带有特定UDF的SQL Server 2017数据库,尝试通过SSMS或sqlpackage导出dacpac时出现错误。在ssdt中工作时,VisualStudio也会引发错误。该功能有效,并且那里没有问题。这里包含的是该功能的精简版,存在相同的问题。您可以创建一个空数据库,添加该函数,然后dacpac提取将失败。我知道这里的设计选择很差,但这只是脚本的一个示例,仍然会重现错误。

功能:

CREATE FUNCTION [dbo].[testFunction]
(
    @string varchar(max)
)
RETURNS bit
AS
BEGIN
    DECLARE @Valid BIT = CASE WHEN EXISTS (
        SELECT *
        FROM STRING_SPLIT(@string,',') s
        OUTER APPLY (select LEN(s.value) AS l) AS l
    )
    THEN 0 ELSE 1 END
    RETURN @Valid
END

从字面上看,它只是用逗号分隔的字符串,将其拆分,在外部应用以生成长度(我知道,愚蠢的IRL,但是demo)。 但是,尝试提取dacpac时会出现错误“对象引用未设置为对象的实例。”

如果我将select *更改为s.value或选择1,那么瞧,dacpac生成并且Visual Studio不会崩溃。

对于上述代码中的select *为什么会导致dacpac失败,有任何想法吗?我们正在评估使用ssdt进行源代码控制,但是当上面的随机操作显然比sql引擎本身执行更多的代码验证时,上面的随机内容不会给我带来使用感。

环境:

SQL Server 2017标准版

已安装SSDT的VS 2019社区

SQLPackage内部版本15.0.4826.1

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)