如何插入这个xml字段(通过msxml转换为SQL)

时间:2015-08-26 13:04:25

标签: sql xml msxml

我想创建sql查询,与msxml创建的完全相同。 例如,我有这个xml:

 <COLUMN name="NAME" type="INTEGER" not_null="true" sub_key="2" fk_table="T_SOME_TABLE"
 fk_column="FK_VALUE" fk_cardinality="1..n" fk_aggregate="false" dict_id="30" advanced="false"
 uiname="Input type" project="SOME_PROJECT">
 <INFO>
  SOME INFO
 </INFO>
</COLUMN>

我不知道它会创建什么查询,因为我不知道SQL查询中fk_cardinality fk_aggregate的结果是什么。

你能告诉我怎么看这个查询吗?

1 个答案:

答案 0 :(得分:0)

你在这里:

declare @x XML='<COLUMN name="NAME" type="INTEGER" not_null="true" sub_key="2" fk_table="T_SOME_TABLE"
 fk_column="FK_VALUE" fk_cardinality="1..n" fk_aggregate="false" dict_id="30" advanced="false"
 uiname="Input type" project="SOME_PROJECT">
 <INFO>
  SOME INFO
 </INFO>
</COLUMN>';

SELECT @x.value('/COLUMN[1]/@name','varchar(max)') AS [name]
      ,@x.value('/COLUMN[1]/@type','varchar(max)') AS [type]
      ,@x.value('/COLUMN[1]/@not_null','bit') AS [not_null]
      ,@x.value('/COLUMN[1]/@sub_key','int') AS [sub_key]
      ,@x.value('/COLUMN[1]/@fk_table','varchar(max)') AS [fk_table]
      ,@x.value('/COLUMN[1]/@fk_column','varchar(max)') AS [fk_column]
      ,@x.value('/COLUMN[1]/@fk_cardinality','varchar(max)') AS [fk_cardinality]
      ,@x.value('/COLUMN[1]/@fk_aggregate','bit') AS [fk_aggregate]
      ,@x.value('/COLUMN[1]/@dict_id','int') AS [dict_id]
      ,@x.value('/COLUMN[1]/@advanced','bit') AS [advanced]
      ,@x.value('/COLUMN[1]/@uiname','varchar(max)') AS [uiname]
      ,@x.value('/COLUMN[1]/@project','varchar(max)') AS [project]
      ,@x.value('/COLUMN[1]/INFO[1]','varchar(max)') AS [INFO]