[英]Creating SQL Columns from XML Attribute values
我希望有人能提供建議或幫助。 我有一個來自客戶端的XML(必須經過格式化),我想從XML元素中提取一些屬性,將該屬性的值創建為一列,然后用相應的值填充該列來自節點。 因此,例如在下面的示例中,提取nField
屬性值,然后為其分配對應的<value>
:
<root>
<entry dType="TXT" bMark="Name" nField="FName">
<value>Johnny</value>
</entry>
<entry dType="TXT" bMark="Product" nField="ProdRng">
<value>ABC</value>
</entry>
…等等
產生具有2列的表,第一個標頭為“ FName
”, ProdRng
“ "Johnny"
,第二個標頭為“ ProdRng
”及其值"ABC"
。
有人可以協助嗎?
如果可以使用SQL Server; 使用動態SQL的解決方案是:
declare @sql nvarchar(max), @txt nvarchar(max) =
'<root>
<entry dType="TXT" bMark="Name" nField="FName">
<value>Johnny</value>
</entry>
<entry dType="TXT" bMark="Product" nField="ProdRng">
<value>ABC</value>
</entry>
</root>';
with t as (
select cast(@txt as xml) as x
), columnsInfo as (
select
tx.c.value('@nField', 'nvarchar(20)') columnName,
tx.c.value('@dType', 'nvarchar(20)') columnType,
tx.c.value('./value[1]', 'nvarchar(20)') columnValue
from t
cross apply t.x.nodes('/root/entry') tx(c)
)
select
@sql =
case when @sql is null then
'create table [t' + cast(newid() as nvarchar(40)) + '] ('
-- I use `newid()` for name of table to avoid duplicate
else
@sql + ','
end + ' [' + columnName + '] ' +
case when columnType = 'TXT' then
'nvarchar(255)'
else
'[int]'
end +
' null'
from columnsInfo;
set @sql = @sql + ') on [primary]';
exec sp_sqlexec @sql;
SQL命令將為:
create table [t3C34CC17-CE06-483E-960E-F8C5E31478AE] ( [FName] nvarchar(255) null, [ProdRng] nvarchar(255) null) on [primary]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.