ITPub博客

首页 > 数据库 > SQL Server > SELECT * FROM OPENXML在sql2000、sql2005中使用的不同

SELECT * FROM OPENXML在sql2000、sql2005中使用的不同

原创 SQL Server 作者:qdrzq 时间:2015-04-22 14:17:21 0 删除 编辑
最近有一个SQL Server应用进行库移植,原本运行在SQL2000下,移植到SQL2005下.
结果出现下列提示:
服务器: 消息 492,级别 16,状态 1,过程 sp_Parse_XML,行 20
在通过 OPENQUERY 和 OPENROWSET 获得的结果集中不允许有重复的列名。列名 "ST" 是重复的。
模块 'sp_proc_XML' 取决于缺少的对象 'sp_Parse_XML'。仍将创建此模块;但是,只有在该对象存在之后它才能成功运行。
经查看sp_Parse_XML的代码,其中有如下片段:
 insert into #tbl
 (CxCalcNo,TradeNo,TradeType,TradeOrg,TradeDep,ClsCode,
                                          BrandCode,PageNo,SeNo,PluID,Plucode,PluName,YsTotal,XsDate,
                                          YxTotal,ISUSED,ISCALC,Cardlxcode,Hyno)
 select @vs_CxCalcNo,SN,'1',Org,Dep,'','',1,1,iPI,'','',ST,XD,ST,'0','0',HyTp,HyNo
 FROM
  OPENXML   (@Pointer, '/IP',2)--第三个参数2,是以元素为中心的映射
  WITH  
            (  
  [Org]   varchar(10),
  [SN]    varchar(20), 
  [XD]    datetime,
  [HyTp] varchar(4),
  [HyNo]  varchar(20)
            ) ,
  OPENXML   (@Pointer, '//PluR',2) 
            WITH  
            (  
                [Dep]   varchar(50), 
                [iPI]   varchar(50),  
                ST     numeric(19,2),
                ST     numeric(19,2)
            )
测试了一下,结果是这样的:

在sql2000中SQL
SELECT *  FROM  OPENXML  XMLNAME  WITH (fld1,fld2,fld3,fld3)
with参数可以重复脚本执行不会报错

在sql2005中SQL
SELECT *  FROM  OPENXML  XMLNAME  WITH (fld1,fld2,fld3,fld3)
with参数不可以重复脚本执行会报错:
在通过 OPENQUERY 和 OPENROWSET 获得的结果集中不允许有重复的列名。列名 "fld3" 是重复的。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29512902/viewspace-1591170/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-03-01

  • 博文量
    38
  • 访问量
    362734