如何将指定位置下的XML文件导入SQL Server
发布网友
发布时间:2022-04-08 01:40
我来回答
共2个回答
懂视网
时间:2022-04-08 06:01
proc [ali].[ins_冻结金额表]
@xmldoc varchar(max),
@userGid varchar(100)
as
declare @idoc int
exec sp_xml_preparedocument @idoc output,@xmldoc
insert into ali.user冻结金额表
select newid(),@userGid,*,getdate() from openxml(@idoc,‘/alipay_user_account_freeze_get_response/freeze_items/account_freeze‘,2)
with(freeze_amount decimal(18,2),freeze_name varchar(50),freeze_type varchar(50))
exec sp_xml_removedocument @idoc -- 释放内存,因为调用sp_xml_preparedocument 时,会占用sqlserver总内存的 八分之一,所以用完要立即消除
因为执行 sp_xml_preparedocument 时有可能会返回一个 “文本内容中发现无效字符”错误( 出现原因是xml中存在汉字),需要在xml里加入头部信息,如果 xml为varchar,则加入<?xml version="1.0" encoding="gb2312" ?> , 或者 直接把 xml类型改成nvarchar,就不会出现错误了
把xml数据直接插入到sqlserver数据库
标签:
热心网友
时间:2022-04-08 03:09
SQLServer2005分解并导入xml文件[@more@]
1. 一次性导入:
DECLARE @idoc int;
DECLARE @doc xml;
SELECT @doc=BulkColumn FROM OPENROWSET(BULK N'E:MStarInstryCodes.xml', SINGLE_BLOB) AS x
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT * into tmp_tab FROM OPENXML (@idoc, '/Root/Record'/',2)
WITH
(
InstryCode varchar(10)
,InstryGlobalId varchar(10)
,InstryName varchar(100)
,SectorCode varchar(10)
,SectorGlobalId varchar(10)
,SectorName varchar(100)
,SuperSectorCode varchar(10)
,SuperSectorName varchar(100)
,GroupCode varchar(10)
,GroupName varchar(100)
,CountryId varchar(3)
)
EXEC sp_xml_removedocument @idoc
select * from tmp_tab
2. 先导入到表中varchar(MAX)列,然后再用OPENXML解析,读出。
-- 使用SINGLE_CLOB参数,tmp_raw中字段为varcahr(MAX)类型
SELECT * into tmp_raw FROM OPENROWSET(BULK N'E:MStarInstryCodes.xml', SINGLE_CLOB) AS x
DECLARE @idoc int;
DECLARE @doc xml;
select @doc = BulkColumn from tmp_raw
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT top 10 * FROM OPENXML (@idoc, '/Root/Record', 1)
WITH
(
InstryCode varchar(10)
,InstryGlobalId varchar(10)
,InstryName varchar(100)
,SectorCode varchar(10)
,SectorGlobalId varchar(10)
,SectorName varchar(100)
,SuperSectorCode varchar(10)
,SuperSectorName varchar(100)
,GroupCode varchar(10)
,GroupName varchar(100)
,CountryId varchar(3)
)
EXEC sp_xml_removedocument @idoc追问除了复制粘贴,能否给点详细的批注?