【发布时间】:2013-12-10 12:14:02
【问题描述】:
我有多个接受 XML 参数的过程(我知道我可以改用 TVP,但它适合应用程序也传递 XML 的旧方法)。
以下代码从 XML 填充表:
DECLARE @tmp TABLE (userID int, colA int);
DECLARE @xml XML = '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<rows>
<row userId="1" colA="234" />
<row userId="1" colB="564" />
<row userId="1" colA="252" />
</rows>';
INSERT INTO @tmp
(userID, colA)
SELECT
u.n.value('@userId', 'int'),
u.n.value('@colA', 'int')
FROM
@xml.nodes('/rows/row') AS u (n);
SELECT * FROM @tmp;
但是请注意,XML 的第二行实际上并没有 colA 元素。我知道这会在表中创建一个 NULL,但在我的应用程序中,允许使用 NULL 值。
userID colA
----------- -----------
1 234
1 NULL
1 252
那么,在填充数据之前,有什么方法可以在 TSQL 中执行某种类型的检查(像这样)?
For each XML row
If (userId element does not exist) OR (colA element does not exist) Then
RAISERROR (caught by BEGIN/END TRAN within procedures/calling procedure)
【问题讨论】:
标签: sql sql-server tsql sql-server-2012 sqlxml