我有一个带有类型列的 SQL Server 表XML
。XML 数据表示给定字段的多个允许选择。XML 数据的一个例子如下。
<Values>
<Value>Valid Value 1</Value>
<Value>Valid Value 2</Value>
<Value>Valid Value 3</Value>
<Value>Valid Value 4</Value>
<Value>Valid Value 5</Value>
<Value>Valid Value 6</Value>
...
</Values>
我正在使用以下代码从XML
列中提取数据并将其转换为可以插入到新表中的行。
DECLARE @XmlStuff VARCHAR(4000);
DECLARE @iXmlStuff int;
SELECT @XmlStuff = CAST(C.ValidValues AS VARCHAR(4000))
FROM dbo.ColumnValidations C
WHERE C.[ColumnName] = 'Something';
EXEC sp_xml_preparedocument @iXmlStuff OUTPUT, @XmlStuff;
SELECT *
FROM OPENXML(@iXmlStuff, '/Values/Value', 2)
WITH ([Value] VARCHAR(100) '.');
EXEC sp_xml_removedocument @iXmlStuff;
此代码正确返回以下内容
Value
----------------
Valid Value 1
Valid Value 2
Valid Value 3
Valid Value 4
Valid Value 5
Valid Value 6
...
这是最好的方法吗?
我认为,我在这里所拥有的将需要在存储过程中。理想情况下,我正在寻找一种方法,我不必担心由于 xml 列中包含不可预见的数据量而导致缓冲区溢出而丢失数据。