gpt4 book ai didi

sql-server - SQL如何使udf错误返回null?

转载 作者:行者123 更新时间:2023-12-03 08:57:39 26 4
gpt4 key购买 nike

我正在SQL Server 2008上运行。我正在选择列类型varchar,并将每个值都转换为XML类型。但是,varchar值可能并不总是采用正确的XML格式。如果它不是正确的XML格式,则需要打印出“ERROR”,然后继续。问题是我不确定如何处理转换错误。在我的选择周围尝试使用TRY-CATCH,但遇到错误时会停止选择。我求助于创建一个函数来检查从varchar到XML的转换是否有效,并且如果转换导致错误,则需要该函数返回null。我该怎么做?

这是我要转换的数据的非常简化的版本

select dbo.isxml(val)

from (VALUES
('<\fewafeawf'),
('<XML><STUFF DATA="TEST" /></XML>'),
('<XML>efaweff')) X(val)

这就是我现在拥有的功能无法弄清楚如果转换失败,如何将其调整为返回null
create function dbo.isxml(@NT varchar(max)) returns xml
as
begin

declare @output xml

set @output = cast(@NT as xml)

return @output

end
go

我想要的输出是
NULL
<XML><STUFF DATA="TEST" /></XML>'
NULL

已尝试使用TRY-CONVERT函数,但适用于sql server2012。已尝试在函数中使用TRY-CATCH语句,但在UDF函数中不能包含TRY-CATCH语句。考虑使用过程并尝试在过程中进行捕获,但我实际上并没有进行任何更新或插入操作,因此在这种情况下,过程看起来似乎并不是我应该使用的。不确定如何处理。

任何帮助将是巨大的!谢谢!

最佳答案

现在已经为此工作了一段时间,但我无法像您理想地希望它那样工作。您已经提到(在您的编辑中)一些我想提到的东西,例如try_cast。

我确实尝试了几件事,但是我唯一能上类的事情将会很慢。我创建了一个带有输出参数的SP,您可以在循环/光标中调用它,这虽然可行,但并不理想。

ALTER PROCEDURE dbo.isxml2
@NT varchar(max),
@Result xml OUTPUT
AS
BEGIN
SET NOCOUNT ON

BEGIN TRY
set @Result = cast(@NT as xml)
END TRY
BEGIN CATCH
set @Result = NULL
END CATCH
END
GO

您唯一的其他选择是不调用强制转换(在您的UDF中),除非它看起来是XML。这意味着您必须对其进行测试,以查看其是否满足CAST的要求。

或者,编写CLR来处理此问题,甚至更糟。

关于sql-server - SQL如何使udf错误返回null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19138340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com