批量加载XML数据到SQL Server 2008

时间:2012-05-16 15:19:51

标签: sql sql-server-2008

我正在尝试使用以下脚本将XML数据批量加载到SQL Server 2008:

CREATE TABLE #WorkingTable (Data XML) 
INSERT INTO #WorkingTable 
SELECT * 
FROM   OPENROWSET(BULK'C:\Users\\MassDotParknRideLots.xml',SINGLE_BLOB) AS data 

DECLARE  @XML    AS XML 
,@hDoc  AS INT 
 SELECT @XML = Data FROM   #WorkingTable 
 EXEC sp_xml_preparedocument @hDoc OUTPUT , @XML

 --DECLARE @LocationSeedValue INT,@NumLocations INT,@TransiFacSeedValue INT,    @PiFacSeedValue INT
CREATE TABLE #Location_PNR(
[locationDesc] [varchar](150) NOT NULL,
[intersection] [varchar](150) NULL,
[featureType] [varchar](16) NOT NULL,
[x_coordinate] [float] NULL,
[y_coordinate] [float] NULL,
[city] [varchar](50) NULL,
[state] [varchar](16) NULL,
[creationDate] [datetime] NOT NULL,
[publicLocationDescription] [varchar](150) NULL,
[locationIDX] [int] IDENTITY(1,1) NOT NULL,
[locationID] [varchar](50) NULL,
[LastUpdated] [datetime] NULL,
[effectiveDate] [datetime] NULL
)

CREATE TABLE #tbl_Transit_Facility(
[TransitFacilityIDX] [int] IDENTITY(1,1) NOT NULL,
[FacilityName] [varchar](1024) NULL,
[FacilityDescription] [varchar](1024) NULL,
[Owner] [varchar](1024) NULL,
[TransitFacilityID] [varchar](50) NULL,
[LocationPTR] [int] NULL,
[LastUpdated] [datetime] NULL
)

CREATE TABLE #PiParkingFacility(
[PI_ParkingFacID_id] [int] IDENTITY(1,1) NOT NULL,
[Spddlandmarkname] [nvarchar](1024) NULL,
[spddLandmarkdesc] [nvarchar](255) NULL,
[SpddCityname] [nvarchar](30) NULL,
[SpddState] [varchar](50) NULL,
[PiddParkingownerName] [nvarchar](60) NULL,
--[PiddParkingSpacesTotal] [int] NULL,
[PiddParkingtype] [int] NULL,
[PiddparkingRates] [nvarchar](255) NULL,
--[PiddParkinghoursofoperations] [nvarchar](255) NULL,
--[PiddTransithoursofoperations] [nvarchar](255) NULL,
[SPddlatitude] [float] NULL,
[spddlongitude] [float] NULL,
[Cptddactivationdate] [int] NULL,
[TransitFacilityPtr] [int] NOT NULL
)

 --SET @LocationSeedValue  = IDENT_CURRENT('Location')+1;
--SET @TransiFacSeedValue  = IDENT_CURRENT('tbl_Transit_Facility')+1;
--SET @PiFacSeedValue = IDENT_CURRENT('PiParkingFacility')+1;

--dbcc checkident (#Location_PNR, reseed, @LocationSeedValue);
--dbcc checkident (#tbl_Transit_Facility, reseed, @TransiFacSeedValue);
--dbcc checkident (#PiParkingFacility, reseed, @PiFacSeedValue);

--select IDENT_CURRENT('#PiParkingFacility')


INSERT INTO #Location_PNR(
[locationDesc] ,
[intersection],
[featureType],
[x_coordinate],
[y_coordinate],
[city],      
[state],
[creationDate],
[publicLocationDescription],
[locationID],
[LastUpdated],
[effectiveDate]
 )
 SELECT 
LOCATION locationDesc,LOCATION intersection,'transitFacility' featureType,
x x_coordinate,y y_coordinate, TOWN City, 'MA' State,
getdate() creationDate,LOCATION publicLocationDescription,
pnrr_pnr_id locationID,
 getdate() LastUpdated,getdate() effectiveDate
 FROM   OPENXML (@hDoc, 'Import/Row', 2) 
with(
    pnrr_pnr_id varchar(50),
    shapeid varchar(50),
    x varchar(50),
    y varchar(50),
    OBJECTID varchar(50),
    TOWN varchar(50),
    LOCATION varchar(50),
    STATUS varchar(50),
    DISTRICT varchar(50),
    OPERATOR varchar(50),
    BIKE_RACKS varchar(50),
    SHELTERS varchar(50),
    PHONES varchar(50),
    LIGHTS varchar(50),
    FENCES varchar(50),
    SIGNS varchar(50),
    OWNER varchar(50),
    CAPACITY varchar(50),
    BUS_SERVIC varchar(50),
    RAIL_SERVI varchar(50),
    BOAT_SERVI varchar(50),
    MAP_ID varchar(50),
    MPO varchar(50),
    SYMBOL varchar(50)
) 

  --Transit facilities
  INSERT INTO #tbl_Transit_Facility(
[FacilityName],
[FacilityDescription],
[Owner],
[TransitFacilityID],
[LocationPTR],
[LastUpdated]
 )
 SELECT LOCATION FacilityName,LOCATION FacilityDescription,
Facs.owner Owner,
pnrr_pnr_id TransitFacilityID,LP.LocationIDX LocationPTR,  getdate() LastUpdated
 FROM   OPENXML (@hDoc, 'Import/Row', 2) 
with(
    pnrr_pnr_id varchar(50),
    shapeid varchar(50),
    x varchar(50),
    y varchar(50),
    OBJECTID varchar(50),
    TOWN varchar(50),
    LOCATION varchar(50),
    STATUS varchar(50),
    DISTRICT varchar(50),
    OPERATOR varchar(50),
    BIKE_RACKS varchar(50),
    SHELTERS varchar(50),
    PHONES varchar(50),
    LIGHTS varchar(50),
    FENCES varchar(50),
    SIGNS varchar(50),
    OWNER varchar(50),
    CAPACITY varchar(50),
    BUS_SERVIC varchar(50),
    RAIL_SERVI varchar(50),
    BOAT_SERVI varchar(50),
    MAP_ID varchar(50),
    MPO varchar(50),
    SYMBOL varchar(50)

) Facs JOIN #Location_PNR LP ON Facs.pnrr_pnr_id = LP.locationID

 --PIParking facilities
  INSERT INTO #PiParkingFacility(
[Spddlandmarkname],
[spddLandmarkdesc],
[PiddParkingownerName],
[SpddCityname], 
[SpddState],
--[PiddParkinghoursofoperations] [nvarchar](255) NULL,
--[PiddTransithoursofoperations] [nvarchar](255) NULL,
--[SPddlatitude],
--[spddlongitude],
--[Cptddactivationdate],
[TransitFacilityPtr]
   )
    SELECT LOCATION Spddlandmarkname,LOCATION spddLandmarkdesc,
PiFacs.owner PiddParkingownerName, PiFacs.TOWN SpddCityname,'MA' SpddState,
Facs.TransitFacilityIDX  TransitFacilityPtr
    FROM   OPENXML (@hDoc, 'Import/Row', 2) 
with(
    pnrr_pnr_id varchar(50),
    shapeid varchar(50),
    x varchar(50),
    y varchar(50),
    OBJECTID varchar(50),
    TOWN varchar(50),
    LOCATION varchar(50),
    STATUS varchar(50),
    DISTRICT varchar(50),
    OPERATOR varchar(50),
    BIKE_RACKS varchar(50),
    SHELTERS varchar(50),
    PHONES varchar(50),
    LIGHTS varchar(50),
    FENCES varchar(50),
    SIGNS varchar(50),
    OWNER varchar(50),
    CAPACITY varchar(50),
    BUS_SERVIC varchar(50),
    RAIL_SERVI varchar(50),
    BOAT_SERVI varchar(50),
    MAP_ID varchar(50),
    MPO varchar(50),
    SYMBOL varchar(50)
  ) PiFacs JOIN #tbl_Transit_Facility Facs ON PiFacs.pnrr_pnr_id =  Facs.TransitFacilityID

   select * from #PiParkingFacility

    SET IDENTITY_INSERT location ON

--insert into database
INSERT INTO location(
[locationDesc]
  ,[intersection]
  ,[featureType]
  ,[x_coordinate]
  ,[y_coordinate]
  ,[city]
  ,[state]
  ,[creationDate]
  ,[publicLocationDescription]
  ,[locationIDX]
  ,[locationID]
  ,[LastUpdated]
  ,[effectiveDate]
 )
 Select  
[locationDesc]
  ,[intersection]
  ,[featureType]
  ,[x_coordinate]
  ,[y_coordinate]
  ,[city]
  ,[state]
  ,[creationDate]
  ,[publicLocationDescription]
  ,[locationIDX]
  ,[locationID]
  ,[LastUpdated]
  ,[effectiveDate]
 FROM #Location_PNR 

 SET IDENTITY_INSERT location OFF

 INSERT INTO tbl_Transit_Facility(
[FacilityName],
[FacilityDescription],
[Owner],
[TransitFacilityID],
[LocationPTR],
[LastUpdated]
 )
  SELECT 
[FacilityName],
[FacilityDescription],
[Owner],
[TransitFacilityID],
[LocationPTR],
[LastUpdated]
  from  #tbl_Transit_Facility

   INSERT INTO PiParkingFacility(
[Spddlandmarkname],
[spddLandmarkdesc],
[PiddParkingownerName],
[SpddCityname], 
[SpddState],
--[PiddParkinghoursofoperations] [nvarchar](255) NULL,
--[PiddTransithoursofoperations] [nvarchar](255) NULL,
--[SPddlatitude],
--[spddlongitude],
--[Cptddactivationdate],
[TransitFacilityPtr]
   )
   SELECT  
[Spddlandmarkname],
[spddLandmarkdesc],
[PiddParkingownerName],
[SpddCityname], 
[SpddState],
--[PiddParkingSpacesTotal],
--[PiddParkingtype],
--[PiddparkingRates],
--[PiddParkinghoursofoperations] [nvarchar](255) NULL,
--[PiddTransithoursofoperations] [nvarchar](255) NULL,
--[SPddlatitude],
--[spddlongitude],
--[Cptddactivationdate],
[TransitFacilityPtr]
    FROM #PiParkingFacility

    select * from location where state = 'MA';

    --select * from location where state = 'PA';

      Insert into PiPNRAdmin(DontDisplayon511,PI_ParkingFacID_id)
Select 1 DontDisplayon511, PI_ParkingFacID_id from #PiParkingFacility

XML中的列/元素名称是:

   shapeid  x   y   OBJECTID    TOWN    LOCATION    STATUS  DISTRICT        OPERATOR    BIKE_RACKS  SHELTERS    PHONES  LIGHTS  FENCES  SIGNS   OWNER   CAPACITY    BUS_SERVIC  RAIL_SERVI  BOAT_SERVI  MAP_ID  MPO SYMBOL

#WorkingTable中输入了1行..但之后有0行上传;

不知道我哪里错了......

提前致谢。

0 个答案:

没有答案
相关问题