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

qdrzq發表於2015-04-22
最近有一個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部落格 ” ,連結:http://blog.itpub.net/29512902/viewspace-1591170/,如需轉載,請註明出處,否則將追究法律責任。

相關文章