I am a little new at this so please bear with me. I am attempting to generate tables from an xml document. Due to some of the contents of the XML document I had to use the convert method, which I am not very familiar with. As a result I get an error. I am not sure why though. I am using Microsoft SQL Server 2016.
Here is my query:
WITH XmlFile (Contents) AS
(
SELECT
CONVERT (XML, BulkColumn,2)
FROM
OPENROWSET (BULK 'C:\Users\Owner\Documents\congress\House votes\114 congress 2015\passage\roll705.xml', SINGLE_BLOB) AS roll705
)
SELECT *
FROM XmlFile
GO
DECLARE @hdoc int
EXEC sp_xml_preparedocument @hdoc OUTPUT, xmlfile
SELECT *
FROM OPENXML (@hdoc, '/rollcall-vote/vote-metadata', 1)
WITH (
congress tinyint,
[session] char(3),
chamber varchar(40),
[rollcall-num] smallint,
[legis-num] varchar(20),
[vote-question] varchar(1000),
[vote-result] varchar (20),
[action-date] date,
[vote-desc] varchar(1000)
)
EXEC sp_xml_removedocument @hdoc
Here is a baby version of my XML document
<?xml-stylesheet type="text/xsl" href="http://clerk.house.gov/evs/vote.xsl"?>
<rollcall-vote>
<vote-metadata>
<majority>R</majority>
<congress>114</congress>
<session>1st</session>
<chamber>U.S. House of Representatives</chamber>
<rollcall-num>705</rollcall-num>
<legis-num>H R 2029</legis-num>
<vote-question>On Concurring in Senate Amdt with Amdt Specified in Section 3(a) of H.Res. 566</vote-question>
<vote-type>YEA-AND-NAY</vote-type>
<vote-result>Passed</vote-result>
<action-date>18-Dec-2015</action-date>
<action-time time-etz="09:49">9:49 AM</action-time>
<vote-desc>Making appropriations for military construction, the Department of Veterans Affairs, and related agencies for the fiscal year ending September 30, 2016, and for other purposes</vote-desc>
</rollcall-vote>
UPDATE
This is where I am at now:
CREATE TABLE [dbo].[staagingTable](
[Counter] INT NOT NULL,
[majority] [nvarchar](max) NULL,
[congress] [int] NULL,
[session] [nvarchar](max) NULL,
[chamber] [nvarchar](max) NULL,
[rollcall-num] [int] NULL,
[legis-num] [nvarchar](max) NULL,
[vote-question] [nvarchar](max) NULL,
[vote-type] [nvarchar](max) NULL,
[vote-result] [nvarchar](max) NULL,
[action-date] [nvarchar](max) NULL,
[action-time] [nvarchar](max) NULL,
[vote-desc] [nvarchar](max) NULL,
[sourceXML] [XML] NULL
);
GO
DECLARE @Counter INT=1;
DECLARE @command VARCHAR(MAX);
WHILE @Counter<800
BEGIN
SET @command=
'
DECLARE @xml XML=
(
SELECT BulkColumn
FROM OPENROWSET (BULK ''C:\Users\Owner\Documents\congress\House votes\114 congress 2015\Passage\roll' + CAST(@Counter AS VARCHAR(10)) + '.xml'', SINGLE_BLOB) AS c
);
INSERT INTO dbo.stagingTable(Counter,majority,congress,[session],chamber
,[rollcall-num],[legis-num],[legislator],[state],[party],[vote],[vote-question],[vote-type]
,[vote-result],[action-date],[action-time],[vote-desc],)
SELECT ' + CAST(@Counter AS VARCHAR(10)) +
',v.value(N''../maority[1]'',N''nvarchar(max)'')
,v.value(N''../congress[1]'',N''int'')
,v.value(N''../session[1]'',N''nvarchar(max)'')
,v.value(N''../chamber[1]'',N''nvarchar(max)'')
,v.value(N''../rollcall-num[1]'',N''int'')
,v.value(N''../legis-num[1]'',N''nvarchar(max)'')
,v.value(N''../vote-question[1]'',N''nvarchar(max)'')
,v.value(N''../vote-type[1]'',N''nvarchar(max)'')
,v.value(N''../vote-result[1]'',N''nvarchar(max)'')
,v.value(N''../action-date[1]'',N''nvarchar(max)'')
,v.value(N''../action-time[1]'',N''nvarchar(max)'')
,v.value(N''../vote-desc[1]'',N''nvarchar(max)'')
,@xml
FROM @xml.nodes(N''/rollcall-vote/vote-metadata'') AS A(v);
';
BEGIN TRY
EXEC(@command);
END TRY
BEGIN CATCH
END CATCH;
SET @Counter=@Counter+1;
END
SELECT * FROM dbo.staagingTable;
GO
DROP TABLE dbo.staagingTable;
this is a screenshot of my data in my folder
UPDATE
This is my query.
CREATE TABLE [dbo].[staagingTable](
[Counter] INT NOT NULL,
[majority] [nvarchar](max) NULL,
[congress] [int] NULL,
[session] [nvarchar](max) NULL,
[chamber] [nvarchar](max) NULL,
[rollcall-num] [int] NULL,
[legis-num] [nvarchar](max) NULL,
[vote-question] [nvarchar](max) NULL,
[vote-type] [nvarchar](max) NULL,
[vote-result] [nvarchar](max) NULL,
[action-date] [nvarchar](max) NULL,
[action-time] [nvarchar](max) NULL,
[vote-desc] [nvarchar](max) NULL,
[sourceXML] [XML] NULL
);
GO
DECLARE @Counter INT=1;
DECLARE @command VARCHAR(MAX);
WHILE @Counter<800
BEGIN
SET @command=
'
DECLARE @xml XML=
(
SELECT BulkColumn
FROM OPENROWSET (BULK ''C:\Users\Owner\Documents\congress\House votes\114 congress 2015\Passage\roll' + REPLACE(STR(@Counter,3),' ','0') + CAST(@Counter AS VARCHAR(10)) + '.xml'', SINGLE_BLOB) AS c
);
INSERT INTO dbo.stagingTable(Counter,majority,congress,[session],chamber
,[rollcall-num],[legis-num],[vote-question],[vote-type]
,[vote-result],[action-date],[action-time],[vote-desc],)
SELECT ' + CAST(@Counter AS VARCHAR(10)) +
',v.value(N''majority[1]'',N''nvarchar(max)'')
,v.value(N''congress[1]'',N''int'')
,v.value(N''session[1]'',N''nvarchar(max)'')
,v.value(N''chamber[1]'',N''nvarchar(max)'')
,v.value(N''rollcall-num[1]'',N''int'')
,v.value(N''legis-num[1]'',N''nvarchar(max)'')
,v.value(N''vote-question[1]'',N''nvarchar(max)'')
,v.value(N''vote-type[1]'',N''nvarchar(max)'')
,v.value(N''vote-result[1]'',N''nvarchar(max)'')
,v.value(N''action-date[1]'',N''nvarchar(max)'')
,v.value(N''action-time[1]'',N''nvarchar(max)'')
,v.value(N''vote-desc[1]'',N''nvarchar(max)'')
,@xml
FROM @xml.nodes(N''/rollcall-vote/vote-metadata'') AS A(v);
';
BEGIN TRY
EXEC(@command);
END TRY
BEGIN CATCH print 'error'
END CATCH;
SET @Counter=@Counter+1;
END
SELECT * FROM dbo.staagingTable;
GO
DROP TABLE dbo.staagingTable;
UPDATE
CREATE TABLE [dbo].[staagingTable](
[Counter] INT NOT NULL,
[majority] [nvarchar](max) NULL,
[congress] [int] NULL,
[session] [nvarchar](max) NULL,
[chamber] [nvarchar](max) NULL,
[rollcall-num] [int] NULL,
[legis-num] [nvarchar](max) NULL,
[vote-question] [nvarchar](max) NULL,
[vote-type] [nvarchar](max) NULL,
[vote-result] [nvarchar](max) NULL,
[action-date] [nvarchar](max) NULL,
[action-time] [nvarchar](max) NULL,
[vote-desc] [nvarchar](max) NULL,
[sourceXML] [XML] NULL
);
GO
DECLARE @Counter INT=1;
DECLARE @command VARCHAR(MAX);
WHILE @Counter<800
BEGIN
SET @command=
'
DECLARE @xml XML=
(
SELECT BulkColumn
FROM OPENROWSET (BULK ''C:\Users\Owner\Documents\congress\House votes\114 congress 2015\Passage\roll' + REPLACE(STR(@Counter,3),' ','0') + CAST(@Counter AS VARCHAR(10)) + '.xml'', SINGLE_BLOB) AS c
);
INSERT INTO dbo.stagingTable(Counter,majority,congress,[session],chamber
,[rollcall-num],[legis-num],[vote-question],[vote-type]
,[vote-result],[action-date],[action-time],[vote-desc],)
SELECT ' + CAST(@Counter AS VARCHAR(10)) +
',v.value(N''majority[1]'',N''nvarchar(max)'')
,v.value(N''congress[1]'',N''int'')
,v.value(N''session[1]'',N''nvarchar(max)'')
,v.value(N''chamber[1]'',N''nvarchar(max)'')
,v.value(N''rollcall-num[1]'',N''int'')
,v.value(N''legis-num[1]'',N''nvarchar(max)'')
,v.value(N''vote-question[1]'',N''nvarchar(max)'')
,v.value(N''vote-type[1]'',N''nvarchar(max)'')
,v.value(N''vote-result[1]'',N''nvarchar(max)'')
,v.value(N''action-date[1]'',N''nvarchar(max)'')
,v.value(N''action-time[1]'',N''nvarchar(max)'')
,v.value(N''vote-desc[1]'',N''nvarchar(max)'')
,v.value(N''sourceXML[1]'',N''XML)'')
FROM @xml.nodes(N''/rollcall-vote/vote-metadata'') AS A(v);
';
BEGIN TRY
EXEC(@command);
END TRY
BEGIN CATCH print 'error'
END CATCH;
SET @Counter=@Counter+1;
END
SELECT * FROM dbo.staagingTable;
GO
DROP TABLE dbo.staagingTable;
UPDATE
CREATE TABLE [dbo].[staagingTable](
[Counter] INT NOT NULL,
[majority] [nvarchar](max) NULL,
[congress] [int] NULL,
[session] [nvarchar](max) NULL,
[chamber] [nvarchar](max) NULL,
[rollcall-num] [int] NULL,
[legis-num] [nvarchar](max) NULL,
[vote-question] [nvarchar](max) NULL,
[vote-type] [nvarchar](max) NULL,
[vote-result] [nvarchar](max) NULL,
[action-date] [nvarchar](max) NULL,
[action-time] [nvarchar](max) NULL,
[vote-desc] [nvarchar](max) NULL,
[sourceXML] [XML] NULL
);
GO
DECLARE @Counter INT=1;
DECLARE @command VARCHAR(MAX);
WHILE @Counter<800
BEGIN
SET @command=
'
DECLARE @xml XML=
(
SELECT BulkColumn
FROM OPENROWSET (BULK ''C:\Users\Owner\Documents\congress\House votes\114 congress 2015\Passage\roll' + REPLACE(STR(@Counter,3),' ','0') + CAST(@Counter AS VARCHAR(10)) + '.xml'', SINGLE_BLOB) AS c
);
INSERT INTO dbo.stagingTable(Counter,majority,congress,[session],chamber
,[rollcall-num],[legis-num],[vote-question],[vote-type]
,[vote-result],[action-date],[action-time],[vote-desc],)
SELECT ' + CAST(@Counter AS VARCHAR(10)) +
',v.value(N''majority[1]'',N''nvarchar(max)'')
,v.value(N''congress[1]'',N''int'')
,v.value(N''session[1]'',N''nvarchar(max)'')
,v.value(N''chamber[1]'',N''nvarchar(max)'')
,v.value(N''rollcall-num[1]'',N''int'')
,v.value(N''legis-num[1]'',N''nvarchar(max)'')
,v.value(N''vote-question[1]'',N''nvarchar(max)'')
,v.value(N''vote-type[1]'',N''nvarchar(max)'')
,v.value(N''vote-result[1]'',N''nvarchar(max)'')
,v.value(N''action-date[1]'',N''nvarchar(max)'')
,v.value(N''action-time[1]'',N''nvarchar(max)'')
,v.value(N''vote-desc[1]'',N''nvarchar(max)'')
,@xml
FROM @xml.nodes(N''/rollcall-vote/vote-metadata'') AS A(v);
';
BEGIN TRY
EXEC(@command);
END TRY
BEGIN CATCH print ERROR_MESSAGE()
END CATCH;
SET @Counter=@Counter+1;
END
SELECT * FROM dbo.staagingTable;
GO
DROP TABLE dbo.staagingTable;
NEW ERROR
update
CREATE TABLE [dbo].[staagingTable](
[Counter] INT NOT NULL,
[majority] [nvarchar](max) NULL,
[congress] [int] NULL,
[session] [nvarchar](max) NULL,
[chamber] [nvarchar](max) NULL,
[rollcall-num] [int] NULL,
[legis-num] [nvarchar](max) NULL,
[vote-question] [nvarchar](max) NULL,
[vote-type] [nvarchar](max) NULL,
[vote-result] [nvarchar](max) NULL,
[action-date] [nvarchar](max) NULL,
[action-time] [nvarchar](max) NULL,
[vote-desc] [nvarchar](max) NULL,
[sourceXML] [XML] NULL
);
GO
DECLARE @Counter INT=1;
DECLARE @command VARCHAR(MAX);
WHILE @Counter<800
BEGIN
SET @command=
'
DECLARE @xml XML=
(
SELECT BulkColumn
FROM OPENROWSET (BULK ''C:\Users\Owner\Documents\congress\House votes\114 congress 2015\Passage\roll' + REPLACE(STR(@Counter,3),' ','0') + CAST(@Counter AS VARCHAR(10)) + '.xml'', SINGLE_BLOB) AS c
);
INSERT INTO dbo.stagingTable(Counter,majority,congress,[session],chamber
,[rollcall-num],[legis-num],[vote-question],[vote-type]
,[vote-result],[action-date],[action-time],[vote-desc],[sourceXML])
SELECT ' +
',v.value(N''majority[1]'',N''nvarchar(max)'')
,v.value(N''congress[1]'',N''int'')
,v.value(N''session[1]'',N''nvarchar(max)'')
,v.value(N''chamber[1]'',N''nvarchar(max)'')
,v.value(N''rollcall-num[1]'',N''int'')
,v.value(N''legis-num[1]'',N''nvarchar(max)'')
,v.value(N''vote-question[1]'',N''nvarchar(max)'')
,v.value(N''vote-type[1]'',N''nvarchar(max)'')
,v.value(N''vote-result[1]'',N''nvarchar(max)'')
,v.value(N''action-date[1]'',N''nvarchar(max)'')
,v.value(N''action-time[1]'',N''nvarchar(max)'')
,v.value(N''vote-desc[1]'',N''nvarchar(max)'')
,@xml
FROM @xml.nodes(N''/rollcall-vote/vote-metadata'') AS A(v);
';
BEGIN TRY
EXEC(@command);
END TRY
BEGIN CATCH print ERROR_MESSAGE()
END CATCH;
SET @Counter=@Counter+1;
END
SELECT * FROM dbo.staagingTable;
GO
DROP TABLE dbo.staagingTable;
ANOTHER UPDATE
CREATE TABLE [dbo].[staagingTable](
[Counter] INT NOT NULL,
[majority] [nvarchar](max) NULL,
[congress] [int] NULL,
[session] [nvarchar](max) NULL,
[chamber] [nvarchar](max) NULL,
[rollcall-num] [int] NULL,
[legis-num] [nvarchar](max) NULL,
[vote-question] [nvarchar](max) NULL,
[vote-type] [nvarchar](max) NULL,
[vote-result] [nvarchar](max) NULL,
[action-date] [nvarchar](max) NULL,
[action-time] [nvarchar](max) NULL,
[vote-desc] [nvarchar](max) NULL,
[sourceXML] [XML] NULL
);
GO
DECLARE @Counter INT=1;
DECLARE @command VARCHAR(MAX);
WHILE @Counter<800
BEGIN
SET @command=
'
DECLARE @xml XML=
(
SELECT BulkColumn
FROM OPENROWSET (BULK ''C:\Users\Owner\Documents\congress\House votes\114 congress 2015\Passage\roll' + REPLACE(STR(@Counter,3),' ','0') + '.xml'', SINGLE_BLOB) AS c
);
INSERT INTO dbo.staagingTable(Counter,majority,congress,[session],chamber
,[rollcall-num],[legis-num],[vote-question],[vote-type]
,[vote-result],[action-date],[action-time],[vote-desc],[sourceXML])
SELECT ' + CAST(@Counter AS VARCHAR(10)) +
',v.value(N''majority[1]'',N''nvarchar(max)'')
,v.value(N''congress[1]'',N''int'')
,v.value(N''session[1]'',N''nvarchar(max)'')
,v.value(N''chamber[1]'',N''nvarchar(max)'')
,v.value(N''rollcall-num[1]'',N''int'')
,v.value(N''legis-num[1]'',N''nvarchar(max)'')
,v.value(N''vote-question[1]'',N''nvarchar(max)'')
,v.value(N''vote-type[1]'',N''nvarchar(max)'')
,v.value(N''vote-result[1]'',N''nvarchar(max)'')
,v.value(N''action-date[1]'',N''nvarchar(max)'')
,v.value(N''action-time[1]'',N''nvarchar(max)'')
,v.value(N''vote-desc[1]'',N''nvarchar(max)'')
,@xml
FROM @xml.nodes(N''/rollcall-vote/vote-metadata'') AS A(v);
';
BEGIN TRY
EXEC(@command);
END TRY
BEGIN CATCH print ERROR_MESSAGE()
END CATCH;
SET @Counter=@Counter+1;
END
SELECT * FROM dbo.staagingTable;
GO
DROP TABLE dbo.staagingTable;
In the picture below you can see the error. The files that don't exist have the same old bulk file not found message. But the files that do exist (like 006, 012, and 014) have a different message.