Sql server SQL如何使udf在出现错误时返回null?
我正在运行SQL server 2008。我正在选择一个列类型varchar,并将每个值转换为XML类型。但是,varchar值可能并不总是采用正确的XML格式。如果它不是正确的XML格式,我需要打印“ERROR”,然后继续。问题是我不确定如何处理转换错误。尝试在我的选择周围使用TRY-CATCH,但在出现错误时停止选择。我求助于创建一个函数来检查从varchar到XML的转换是否有效,如果转换导致错误,则需要函数返回null。我该怎么做 这是我试图转换的数据的非常简化的版本Sql server SQL如何使udf在出现错误时返回null?,sql-server,sql-server-2008,tsql,error-handling,sql-convert,Sql Server,Sql Server 2008,Tsql,Error Handling,Sql Convert,我正在运行SQL server 2008。我正在选择一个列类型varchar,并将每个值转换为XML类型。但是,varchar值可能并不总是采用正确的XML格式。如果它不是正确的XML格式,我需要打印“ERROR”,然后继续。问题是我不确定如何处理转换错误。尝试在我的选择周围使用TRY-CATCH,但在出现错误时停止选择。我求助于创建一个函数来检查从varchar到XML的转换是否有效,如果转换导致错误,则需要函数返回null。我该怎么做 这是我试图转换的数据的非常简化的版本 select db
select dbo.isxml(val)
from (VALUES
('<\fewafeawf'),
('<XML><STUFF DATA="TEST" /></XML>'),
('<XML>efaweff')) X(val)
我想要的输出是
NULL
<XML><STUFF DATA="TEST" /></XML>'
NULL
NULL
'
无效的
已尝试使用TRY-CONVERT函数,但该函数适用于sql server 2012。已尝试在函数中使用TRY-CATCH语句,但无法在UDF函数中使用TRY-CATCH语句。考虑过使用过程并在过程中尝试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
您唯一的另一个选择是不调用cast(在您的UDF中),除非它看起来是XML。这意味着您必须对其进行测试,以查看它是否满足CAST工作的要求
或者,编写一个CLR来处理这个问题,甚至是最糟糕的问题
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