问题描述
我有一个带有特定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 (将#修改为@)