我需要将纯文本列中的数据转换为xml列。但是,并非所有内容都是有效的XML,所以我需要忽略具有无效XML的任何行。有没有一种方法可以使用某种内联条件转换或WHERE子句中的某些内容过滤掉无效数据?SQL Server:使用XML进行内联条件转换?
1
A
回答
1
听起来你需要为XML数据提供ISNUMERIC函数的一个版本。
遗憾的是没有这样的内置函数存在 - 所以你必须设计出你自己的选择,对其中有几个选项:
如果这是一个一次性的或小规模的过程,其性能不是关键的,你可以在里面光标每次处理的输入表一排,用TRY...CATCH
块来处理无效的类型转换(未经测试):或者
DECLARE xmlCur CURSOR FOR
SELECT textcol
FROM inputTable
OPEN xmlCur
DECLARE @string nvarchar(MAX)
DECLARE @xml xml
FETCH NEXT FROM xmlCur into @string
WHILE @@fetch_status = 0
BEGIN
BEGIN TRY
SET @xml = CAST(@string AS XML)
-- Do something with XML
END TRY
BEGIN CATCH
-- log failure/mark source row as invalid
END CATCH
FETCH NEXT FROM xmlCur into @string
END
CLOSE xmlCur
DEALLOCATE xmlCur
,如果你熟悉的.Net编程(并在您的服务器上启用它),您可以使用CLR来创建您自己的IsXML函数。 .Net代码将不会比this thread上的第三个帖子复杂得多。
CLR解决方案的性能可能不如游标更好 - 您需要测试以确定这一点。
(一个显而易见的尝试,它不起作用,是一个标量值T-SQL函数,它试图在TRY...CATCH
块内将字段转换为XML,但TRY...CATCH
在函数内部是不允许的。
+0
游标解决方案就是我已经完成的,所以荣誉:D – 2009-09-15 15:19:33
相关问题
- 1. SQL Server - 添加条件内部联接
- 2. 使用XSLT转换内联XML元素
- 3. SQL Server:条件级联
- 4. 需要将SQL Server xml blob转换为表格进行操作
- 5. 在SQL Server中使用替换条件查询XML数据
- 6. 使用有条件禁用的控件进行内联编辑
- 7. 使用XSLT进行XML到CSV转换
- 8. 使用XSLT2进行XML转换分组
- 9. 使用XSLT进行XML转换
- 10. 使用XSLT进行XML转换
- 11. 使用Jython进行XML XSLT转换
- 12. 使用XSL进行XML转换
- 13. 使用XSLT进行XML转换
- 14. 使用xsl进行XML转换
- 15. 使用SQL Server/Reporting Services进行日期转换
- 16. 使用替代命名空间在XML内进行XSL转换
- 17. 使用XML Schema进行条件验证
- 18. SQL Server使用视图上的条件进行计数
- 19. 将Crystal Reports条件转换为SQL Server条件
- 20. 转换行与列WHERE条件SQL Server 2008中
- 21. 使用SQL进行表格转换
- 22. 使用SQL Server进行群发邮件
- 23. 转换列行和SQL Server
- 24. 转换列行的SQL Server
- 25. 使用XSLT根据节点数量对条件进行XML转换
- 26. SQL Server进程队列争用条件
- 27. 转换XML到表中的SQL Server 2005
- 28. 将XML转换为SQL Server数据库
- 29. SQL Server将XML转换为JSON
- 30. 转换sql server文件
什么版本的SQL Server? – 2009-09-14 23:49:20
SQL 2005 15char – 2009-09-15 00:10:07