I want to extract the itemnumber from the XML data to columns.
However in the XML file there is more than 1 value (itemnumber) per row.
(there could be about 100 itemnumbers per row)
My query works good but its too slow due to the amount of sub-queries I'd have to make to extract all the data out of the XML
The sub-query looks like this
SELECT RIGHT(LEFT(Cast(x.data AS XML).value ('(table/id/text())[1]','varchar(100)'),37),36) AS id,
Cast(x.data AS XML).value ('(//column[#name="Artikelen"]/#value)[9]','VARCHAR(255)') AS 'item',
Cast(x.data AS XML).value ('(//column[#name="Batchnummer"]/#value)[9]','VARCHAR(255)') AS Batch,
Cast(x.data AS XML).value('(//column[#name="Aantal"]/#value)[9]','INT') AS Aantal
FROM synergy..xmldata x (nolock)
WHERE Cast(x.data AS XML).value ('(//column[#name="Artikelen"]/#value)[9]','VARCHAR(255)') IS NOT NULL
Now this works good but I have to use Union all about 100 times to extract all the data
Is there an easier way to do this?
This is what the full query looks like (FYI I used statement Union all 3 times, if I want it to work I have to copy/paste that 100 times and change the value amount /#value)[xxxx] )
SELECT XMLDATA.id ,
XMLDATA.item ,
XMLDATA.batchnummer ,
XMLDATA.aantal ,
y.freetextfield_02
FROM (
SELECT RIGHT(LEFT(Cast(x.data AS XML).value ('(table/id/text())[1]','varchar(100)'),37),36) AS id,
Cast(x.data AS XML).value ('(//column[#name="Artikelen"]/#value)[1]','VARCHAR(255)') AS 'item',
Cast(x.data AS XML).value ('(//column[#name="Batchnummer"]/#value)[1]','VARCHAR(255)') AS Batch,
Cast(x.data AS XML).value('(//column[#name="Aantal"]/#value)[1]','INT') AS Aantal
FROM synergy..xmldata x (nolock)
WHERE Cast(x.data AS XML).value ('(//column[#name="Artikelen"]/#value)[1]','VARCHAR(255)') IS NOT NULL
UNION ALL
SELECT RIGHT(LEFT(Cast(x.data AS XML).value ('(table/id/text())[1]','varchar(100)'),37),36) AS id,
Cast(x.data AS XML).value ('(//column[#name="Artikelen"]/#value)[2]','VARCHAR(255)') AS 'item',
Cast(x.data AS XML).value ('(//column[#name="Batchnummer"]/#value)[2]','VARCHAR(255)') AS Batch,
Cast(x.data AS XML).value('(//column[#name="Aantal"]/#value)[2]','INT') AS Aantal
FROM synergy..xmldata x (nolock)
WHERE Cast(x.data AS XML).value ('(//column[#name="Artikelen"]/#value)[2]','VARCHAR(255)') IS NOT NULL
UNION ALL
SELECT RIGHT(LEFT(Cast(x.data AS XML).value ('(table/id/text())[1]','varchar(100)'),37),36) AS id,
Cast(x.data AS XML).value ('(//column[#name="Artikelen"]/#value)[3]','VARCHAR(255)') AS 'item',
Cast(x.data AS XML).value ('(//column[#name="Batchnummer"]/#value)[3]','VARCHAR(255)') AS Batch,
Cast(x.data AS XML).value('(//column[#name="Aantal"]/#value)[3]','INT') AS Aantal
FROM synergy..xmldata x (nolock)
WHERE Cast(x.data AS XML).value ('(//column[#name="Artikelen"]/#value)[3]','VARCHAR(255)') IS NOT NULL
) XMLDATA
LEFT JOIN synergy..absences y (nolock)
ON y.id = XMLDATA.id
WHERE y. freetextfield_02 IS NOT NULL
AND type IN ('126',
'129')
this is what the XML looks like:
<table>
<id>{351CE2EE-59E8-43B0-B95B-81A24A2C037E}</id>
<rows>
<row>
<columns>
<column name="Artikelen" value="101445.A.FF" type="System.String" />
<column name="Batchnummer" value="PR1900002366" type="System.String" />
<column name="Aantal" value="1" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="2" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="Artikelen" value="101445.A.FF" type="System.String" />
<column name="Batchnummer" value="PR1900002366" type="System.String" />
<column name="Aantal" value="1" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="3" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="Artikelen" value="101445.A.FF" type="System.String" />
<column name="Batchnummer" value="PR1900002366" type="System.String" />
<column name="Aantal" value="1" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="4" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="Artikelen" value="101445.A.FF" type="System.String" />
<column name="Batchnummer" value="PR1900002366" type="System.String" />
<column name="Aantal" value="1" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="5" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="Artikelen" value="3.46331132.NL" type="System.String" />
<column name="Batchnummer" value="190259" type="System.String" />
<column name="Aantal" value="10" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="14" type="System.Int32" />
</columns>
</row>
</rows>
<key>DefaultKey</key>
<total>0</total>
<AddOnKey>0</AddOnKey>
<data />
<parameters />
</table>
This is what the dataset TABLE looks like i'm extracting the xml from the column Data
DATASET XML IMAGE
You need to use nodes to create a row in the dataset for each columns node. Then you can treat it like a data set:
DECLARE #XML xml = '<table>
<id>{351CE2EE-59E8-43B0-B95B-81A24A2C037E}</id>
<rows>
<row>
<columns>
<column name="Artikelen" value="101445.A.FF" type="System.String" />
<column name="Batchnummer" value="PR1900002366" type="System.String" />
<column name="Aantal" value="1" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="2" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="Artikelen" value="101445.A.FF" type="System.String" />
<column name="Batchnummer" value="PR1900002366" type="System.String" />
<column name="Aantal" value="1" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="3" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="Artikelen" value="101445.A.FF" type="System.String" />
<column name="Batchnummer" value="PR1900002366" type="System.String" />
<column name="Aantal" value="1" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="4" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="Artikelen" value="101445.A.FF" type="System.String" />
<column name="Batchnummer" value="PR1900002366" type="System.String" />
<column name="Aantal" value="1" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="5" type="System.Int32" />
</columns>
</row>
<row>
<columns>
<column name="Artikelen" value="3.46331132.NL" type="System.String" />
<column name="Batchnummer" value="190259" type="System.String" />
<column name="Aantal" value="10" type="System.Int32" />
<column name="Opmerkingen" value="retour" type="System.String" />
<column name="Magazijn" value="" type="System.String" />
<column name="Reden" value="" type="System.String" />
<column name="DefaultKey" value="14" type="System.Int32" />
</columns>
</row>
</rows>
<key>DefaultKey</key>
<total>0</total>
<AddOnKey>0</AddOnKey>
<data />
<parameters />
</table>';
SELECT V.X.value('(/table/id/text())[1]','varchar(255)') AS id,
r.c.value('(./column[#name="Artikelen"]/#value)[1]', 'varchar(255)') AS item,
r.c.value('(./column[#name="Batchnummer"]/#value)[1]', 'varchar(255)') AS Batch,
r.c.value('(./column[#name="Aantal"]/#value)[1]', 'varchar(255)') AS Aantal
FROM (VALUES (#XML)) V (X)
CROSS APPLY V.X.nodes('table/rows/row/columns') r(c);
I have an XML file that looks like this:
<extensionG>
<Tables>
<Table TName="__MigrationHistory" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="MigrationId" DataType="nvarchar" DataTypeMaxLength="300" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="ContextKey" DataType="nvarchar" DataTypeMaxLength="600" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="Model" DataType="varbinary" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="ProductVersion" DataType="nvarchar" DataTypeMaxLength="64" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
</Table>
<Table TName="CoatingCost" Schema="dbo">
<Columns>
<Column CName="CoatingCostId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="CoatingId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="LabId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="Cost" DataType="money" DataTypeMaxLength="8" DataTypePrecision="19" DataTypeScale="4" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Price" DataType="money" DataTypeMaxLength="8" DataTypePrecision="19" DataTypeScale="4" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
</Table>
<Table TName="ContactLens" Schema="dbo">
<Columns>
<Column CName="ProductId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
</Table>
</Tables>
</extensionG>
I shred the xml file using this query and put it into a temporary table:
INSERT INTO #TargetDBObjects
SELECT DBTables.Name.value('#TName', 'varchar(100)') AS TableName, DBTables.Name.value('#Schema', 'varchar(20)') AS SchemaName, DBTables.Name.value('#TextImageOnFileGroup', 'varchar(20)') AS TextImageFileGroup,
Cols.C.value('#CName', 'varchar(100)') AS ColName, Cols.C.value('#DataType', 'varchar(20)') AS DataType, Cols.C.value('#DataTypeMaxLength', 'varchar(5)') AS DataTypeMaxLength,
Cols.C.value('#DataTypePrecision', 'varchar(5)') AS DataTypePrecision, Cols.C.value('#DataTypeScale', 'varchar(5)') AS DataTypeScale,
Cols.C.value('#IsIdentityColumn', 'varchar(1)') AS IsIdentityColumn, Cols.C.value('#IdentitySeedValue', 'varchar(5)') AS IdentitySeedValue, Cols.C.value('#IdentityIncrementValue', 'varchar(5)') AS IdentityIncrementValue,
Cols.C.value('#IsColumnNullable', 'varchar(1)') AS IsColumnNullable, Cols.C.value('#PrimaryKey', 'varchar(1)') AS PrimaryKey
FROM #XmlTargetDB.nodes('//Tables/Table') AS DBTables(Name)
CROSS APPLY DBTables.Name.nodes('Columns/Column') AS Cols(C)
When I do a SELECT on the table, the __MigrationHistory and CoatingCost table data is present but not the ContactLens data
Can anybody see anything wrong with the XML file or the query that shreds the xml?
UPDATE
This is a more complete example of the xml file and the entire query that shreds the document:
'<extensionG>
<Tables>
<Table TName="__MigrationHistory" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="MigrationId" DataType="nvarchar" DataTypeMaxLength="300" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="ContextKey" DataType="nvarchar" DataTypeMaxLength="600" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="Model" DataType="varbinary" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="ProductVersion" DataType="nvarchar" DataTypeMaxLength="64" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
<Indexes>
<Index IndexName="PK_dbo.__MigrationHistory" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="MigrationId" IsDescendingSort="0" OrdinalPosition="1" />
<IndexColumn ICName="ContextKey" IsDescendingSort="0" OrdinalPosition="2" />
</Index>
</Indexes>
</Table>
<Table TName="Activity" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="ActivityId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="ApplicationId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Name" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Description" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Code" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
<ForeignKeys>
<ForeignKey FK_Name="FK_dbo.Activity_dbo.Application_ApplicationId" ParentColumn="ApplicationId" ReferenceTable="Application" ReferenceColumn="ApplicationId" IsDisabled="0" HasUpdateRefAction="0" HasDeleteRefAction="1" />
</ForeignKeys>
<Indexes>
<Index IndexName="PK_dbo.Activity" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="ActivityId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
<Index IndexName="IX_ApplicationId" PrimaryKeyIndex="0" IndexDescription="NONCLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="ApplicationId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
</Table>
<Table TName="AdHocContacts" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="AdHocContactId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="PatientProfileId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Name" DataType="varchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Fax" DataType="varchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="Email" DataType="varchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
</Columns>
</Table>
<Table TName="AdjustmentType" Schema="dbo">
<Columns>
<Column CName="AdjustmentId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="AdjustmentName" DataType="nvarchar" DataTypeMaxLength="100" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
<Indexes>
<Index IndexName="PK_AdjustmentType" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="AdjustmentId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
</Table>
<Table TName="Application" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="ApplicationId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="Code" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Name" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
<Indexes>
<Index IndexName="PK_dbo.Application" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="ApplicationId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
</Table>
<Table TName="ApplicationCategory" Schema="dbo">
<Columns>
<Column CName="ApplicationId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="CategoryId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
</Columns>
<ForeignKeys>
<ForeignKey FK_Name="FK_ApplicationCategory_Application" ParentColumn="ApplicationId" ReferenceTable="Application" ReferenceColumn="ApplicationId" IsDisabled="0" HasUpdateRefAction="0" HasDeleteRefAction="0" />
<ForeignKey FK_Name="FK_ApplicationCategory_Category" ParentColumn="CategoryId" ReferenceTable="Category" ReferenceColumn="CategoryId" IsDisabled="0" HasUpdateRefAction="0" HasDeleteRefAction="0" />
</ForeignKeys>
<Indexes>
<Index IndexName="PK_ApplicationCategory" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="ApplicationId" IsDescendingSort="0" OrdinalPosition="1" />
<IndexColumn ICName="CategoryId" IsDescendingSort="0" OrdinalPosition="2" />
</Index>
</Indexes>
</Table>
<Table TName="ApplicationSetting" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="SettingId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="ApplicationId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="SettingKey" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="Value" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
</Columns>
</Table>
<Table TName="Bookmark" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="BookmarkId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="UserName" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Url" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="Name" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
</Columns>
</Table>
<Table TName="Bundle" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="BundleId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="Name" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
<Indexes>
<Index IndexName="PK_dbo.Bundle" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="BundleId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
</Table>
<Table TName="BundleProduct" Schema="dbo">
<Columns>
<Column CName="BundleId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="ProductId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
</Columns>
<ForeignKeys>
<ForeignKey FK_Name="FK_dbo.BundleProduct_dbo.Bundle_BundleId" ParentColumn="BundleId" ReferenceTable="Bundle" ReferenceColumn="BundleId" IsDisabled="0" HasUpdateRefAction="0" HasDeleteRefAction="1" />
<ForeignKey FK_Name="FK_dbo.BundleProduct_dbo.Product_ProductId" ParentColumn="ProductId" ReferenceTable="Product" ReferenceColumn="ProductId" IsDisabled="0" HasUpdateRefAction="0" HasDeleteRefAction="1" />
</ForeignKeys>
<Indexes>
<Index IndexName="PK_dbo.BundleProduct" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="BundleId" IsDescendingSort="0" OrdinalPosition="1" />
<IndexColumn ICName="ProductId" IsDescendingSort="0" OrdinalPosition="2" />
</Index>
<Index IndexName="IX_BundleId" PrimaryKeyIndex="0" IndexDescription="NONCLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="BundleId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
<Index IndexName="IX_ProductId" PrimaryKeyIndex="0" IndexDescription="NONCLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="ProductId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
<Triggers>
<Trigger TriggerName="TestTrigger2" TrigDefinition="-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE TRIGGER TestTrigger2
ON BundleProduct
AFTER DELETE,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for trigger here
select * from Edging;
END
" IsUpdateTrig="1" IsDeleteTrig="1" IsInsertTrig="0" IsAfterTrig="1" IsInsteadOfTrig="0" IsDisabled="0" />
</Triggers>
</Table>
<Table TName="Category" Schema="dbo">
<Columns>
<Column CName="CategoryId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="Name" DataType="varchar" DataTypeMaxLength="50" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
</Columns>
<Indexes>
<Index IndexName="PK_Category" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="CategoryId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
</Table>
<Table TName="Coating" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="CoatingId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="Name" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Inactive" DataType="bit" DataTypeMaxLength="1" DataTypePrecision="1" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="ProcedureCode" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
</Columns>
<Indexes>
<Index IndexName="PK_Coatings" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="CoatingId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
</Table>
<Table TName="CoatingCost" Schema="dbo">
<Columns>
<Column CName="CoatingCostId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="1" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="1" />
<Column CName="CoatingId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="LabId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="Cost" DataType="money" DataTypeMaxLength="8" DataTypePrecision="19" DataTypeScale="4" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
<Column CName="Price" DataType="money" DataTypeMaxLength="8" DataTypePrecision="19" DataTypeScale="4" IsIdentityColumn="0" IdentitySeedValue="1" IdentityIncrementValue="1" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
<ForeignKeys>
<ForeignKey FK_Name="FK_CoatingCost_Coating" ParentColumn="CoatingId" ReferenceTable="Coating" ReferenceColumn="CoatingId" IsDisabled="0" HasUpdateRefAction="0" HasDeleteRefAction="0" />
<ForeignKey FK_Name="FK_CoatingCost_Lab" ParentColumn="LabId" ReferenceTable="Lab" ReferenceColumn="LabId" IsDisabled="0" HasUpdateRefAction="0" HasDeleteRefAction="0" />
</ForeignKeys>
<Indexes>
<Index IndexName="PK_CoatingCost" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="CoatingCostId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
</Table>
<Table TName="ContactLens" Schema="dbo">
<Columns>
<Column CName="ProductId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="0" />
</Columns>
</Table>
<Table TName="Contacts" Schema="dbo" TextImageOnFileGroup="PRIMARY">
<Columns>
<Column CName="BaseCurve" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="Cylinder" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="Diameter" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="Power" DataType="nvarchar" DataTypeMaxLength="-1" DataTypePrecision="0" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="1" PrimaryKey="0" />
<Column CName="ProductId" DataType="int" DataTypeMaxLength="4" DataTypePrecision="10" DataTypeScale="0" IsIdentityColumn="0" IsColumnNullable="0" PrimaryKey="1" />
</Columns>
<ForeignKeys>
<ForeignKey FK_Name="FK_Contacts_Product" ParentColumn="ProductId" ReferenceTable="Product" ReferenceColumn="ProductId" IsDisabled="0" HasUpdateRefAction="0" HasDeleteRefAction="0" />
</ForeignKeys>
<Indexes>
<Index IndexName="PK_Contacts" PrimaryKeyIndex="1" IndexDescription="CLUSTERED" PadIndex="0" Statistics_NoRecompute="0" IgnoreDupKey="0" AllowRowLocks="1" AllowPageLocks="1">
<IndexColumn ICName="ProductId" IsDescendingSort="0" OrdinalPosition="1" />
</Index>
</Indexes>
</Table>
</Tables>
</extensionG>';
This is the query:
SELECT DBTables.Name.value('#TName', 'varchar(100)') AS TableName, DBTables.Name.value('#Schema', 'varchar(20)') AS SchemaName, DBTables.Name.value('#TextImageOnFileGroup', 'varchar(20)') AS TextImageFileGroup,
Cols.C.value('#CName', 'varchar(100)') AS ColName, Cols.C.value('#DataType', 'varchar(20)') AS DataType, Cols.C.value('#DataTypeMaxLength', 'varchar(5)') AS DataTypeMaxLength,
Cols.C.value('#DataTypePrecision', 'varchar(5)') AS DataTypePrecision, Cols.C.value('#DataTypeScale', 'varchar(5)') AS DataTypeScale,
Cols.C.value('#IsIdentityColumn', 'varchar(1)') AS IsIdentityColumn, Cols.C.value('#IdentitySeedValue', 'varchar(5)') AS IdentitySeedValue, Cols.C.value('#IdentityIncrementValue', 'varchar(5)') AS IdentityIncrementValue,
Cols.C.value('#IsColumnNullable', 'varchar(1)') AS IsColumnNullable, Cols.C.value('#PrimaryKey', 'varchar(1)') AS PrimaryKey,
[Indexes].I.value('#IndexName', 'varchar(100)') AS IndexName, [Indexes].I.value('#PrimaryKeyIndex', 'varchar(1)') AS PrimaryKeyIndex, [Indexes].I.value('#IsUnique', 'varchar(1)') AS IsUnique,
[Indexes].I.value('#IndexDescription', 'varchar(120)') AS IndexDescription,
[Indexes].I.value('#PadIndex', 'varchar(1)') AS PadIndex, [Indexes].I.value('#Statistics_NoRecompute', 'varchar(1)') AS StatisticsNoRecompute, [Indexes].I.value('#IgnoreDupKey', 'varchar(1)') AS IgnoreDupKey,
[Indexes].I.value('#AllowRowLocks', 'varchar(1)') AS AllowRowLocks, [Indexes].I.value('#AllowPageLocks', 'varchar(1)') AS AllowPageLocks,
[IndexColumn].IC.value('#ICName', 'varchar(100)') AS IndexColumnName, [IndexColumn].IC.value('#IsDescendingSort', 'varchar(1)') AS IsDescendingSort,
[IndexColumn].IC.value('#OrdinalPosition', 'varchar(2)') AS OrdinalPosition,
ForeignKey.FK.value('#FK_Name', 'varchar(100)') AS ForeignKeyName,
ForeignKey.FK.value('#ParentColumn', 'varchar(50)') AS ParentColumn,
ForeignKey.FK.value('#ReferenceTable', 'varchar(100)') AS ReferenceTable, ForeignKey.FK.value('#ReferenceColumn', 'varchar(50)') AS ReferenceColumn,
ForeignKey.FK.value('#IsDisabled', 'varchar(1)') AS IsDisabled, ForeignKey.FK.value('#HasUpdateRefAction', 'varchar(1)') AS HasUpdateRefAction, ForeignKey.FK.value('#HasDeleteRefAction', 'varchar(1)') AS HasDeleteRefAction,
Defaults.D.value('#DefName', 'varchar(100)') AS DefaultName, Defaults.D.value('#DefValue', 'varchar(100)') AS DefaultValue, Defaults.D.value('#DefColumnName', 'varchar(100)') AS DefColumnName,
Checks.C.value('#CkName', 'varchar(100)') AS CheckName, Checks.C.value('#CkDefinition', 'varchar(500)') AS CkDefinition, Checks.C.value('#IsCkDisabled', 'varchar(1)') AS IsCkDisabled,
[Triggers].T.value('#TriggerName', 'varchar(100)') AS TriggerName, [Triggers].T.value('#TrigDefinition', 'varchar(max)') AS TrigDefinition,
[Triggers].T.value('#IsUpdateTrig', 'varchar(1)') AS IsUpdateTrigger, [Triggers].T.value('#IsDeleteTrig', 'varchar(1)') AS IsDeleteTrigger, [Triggers].T.value('#IsInsertTrig', 'varchar(1)') AS IsInsertTrigger,
[Triggers].T.value('#IsAfterTrig', 'varchar(1)') AS IsAfterTrigger, [Triggers].T.value('#IsInsteadOfTrig', 'varchar(1)') AS IsInsteadOfTrigger, [Triggers].T.value('#IsDisabled', 'varchar(1)') AS IsDisabledTrigger
FROM #XmlTargetDB.nodes('//Tables/Table') AS DBTables(Name)
CROSS APPLY DBTables.Name.nodes('Columns/Column') AS Cols(C)
OUTER APPLY DBTables.Name.nodes('Indexes/Index') AS [Indexes](I)
CROSS APPLY I.nodes('IndexColumn') AS [IndexColumn](IC)
OUTER APPLY DBTables.Name.nodes('ForeignKeys/ForeignKey') AS ForeignKey(FK)
OUTER APPLY DBTables.Name.nodes('DefaultConstraints/Default') AS Defaults(D)
OUTER APPLY DBTables.Name.nodes('CheckConstraints/Check') AS Checks(C)
OUTER APPLY DBTables.Name.nodes('Triggers/Trigger') AS [Triggers](T)
When I change the one CROSS APPLY you have there to an OUTER APPLY the missing table is there.
Your table "ContactLens" does not have a sub-tree <indexes> ...
SELECT DBTables.Name.value('#TName', 'varchar(100)') AS TableName, DBTables.Name.value('#Schema', 'varchar(20)') AS SchemaName, DBTables.Name.value('#TextImageOnFileGroup', 'varchar(20)') AS TextImageFileGroup,
Cols.C.value('#CName', 'varchar(100)') AS ColName, Cols.C.value('#DataType', 'varchar(20)') AS DataType, Cols.C.value('#DataTypeMaxLength', 'varchar(5)') AS DataTypeMaxLength,
Cols.C.value('#DataTypePrecision', 'varchar(5)') AS DataTypePrecision, Cols.C.value('#DataTypeScale', 'varchar(5)') AS DataTypeScale,
Cols.C.value('#IsIdentityColumn', 'varchar(1)') AS IsIdentityColumn, Cols.C.value('#IdentitySeedValue', 'varchar(5)') AS IdentitySeedValue, Cols.C.value('#IdentityIncrementValue', 'varchar(5)') AS IdentityIncrementValue,
Cols.C.value('#IsColumnNullable', 'varchar(1)') AS IsColumnNullable, Cols.C.value('#PrimaryKey', 'varchar(1)') AS PrimaryKey,
[Indexes].I.value('#IndexName', 'varchar(100)') AS IndexName, [Indexes].I.value('#PrimaryKeyIndex', 'varchar(1)') AS PrimaryKeyIndex, [Indexes].I.value('#IsUnique', 'varchar(1)') AS IsUnique,
[Indexes].I.value('#IndexDescription', 'varchar(120)') AS IndexDescription,
[Indexes].I.value('#PadIndex', 'varchar(1)') AS PadIndex, [Indexes].I.value('#Statistics_NoRecompute', 'varchar(1)') AS StatisticsNoRecompute, [Indexes].I.value('#IgnoreDupKey', 'varchar(1)') AS IgnoreDupKey,
[Indexes].I.value('#AllowRowLocks', 'varchar(1)') AS AllowRowLocks, [Indexes].I.value('#AllowPageLocks', 'varchar(1)') AS AllowPageLocks,
[IndexColumn].IC.value('#ICName', 'varchar(100)') AS IndexColumnName, [IndexColumn].IC.value('#IsDescendingSort', 'varchar(1)') AS IsDescendingSort,
[IndexColumn].IC.value('#OrdinalPosition', 'varchar(2)') AS OrdinalPosition,
ForeignKey.FK.value('#FK_Name', 'varchar(100)') AS ForeignKeyName,
ForeignKey.FK.value('#ParentColumn', 'varchar(50)') AS ParentColumn,
ForeignKey.FK.value('#ReferenceTable', 'varchar(100)') AS ReferenceTable, ForeignKey.FK.value('#ReferenceColumn', 'varchar(50)') AS ReferenceColumn,
ForeignKey.FK.value('#IsDisabled', 'varchar(1)') AS IsDisabled, ForeignKey.FK.value('#HasUpdateRefAction', 'varchar(1)') AS HasUpdateRefAction, ForeignKey.FK.value('#HasDeleteRefAction', 'varchar(1)') AS HasDeleteRefAction,
Defaults.D.value('#DefName', 'varchar(100)') AS DefaultName, Defaults.D.value('#DefValue', 'varchar(100)') AS DefaultValue, Defaults.D.value('#DefColumnName', 'varchar(100)') AS DefColumnName,
Checks.C.value('#CkName', 'varchar(100)') AS CheckName, Checks.C.value('#CkDefinition', 'varchar(500)') AS CkDefinition, Checks.C.value('#IsCkDisabled', 'varchar(1)') AS IsCkDisabled,
[Triggers].T.value('#TriggerName', 'varchar(100)') AS TriggerName, [Triggers].T.value('#TrigDefinition', 'varchar(max)') AS TrigDefinition,
[Triggers].T.value('#IsUpdateTrig', 'varchar(1)') AS IsUpdateTrigger, [Triggers].T.value('#IsDeleteTrig', 'varchar(1)') AS IsDeleteTrigger, [Triggers].T.value('#IsInsertTrig', 'varchar(1)') AS IsInsertTrigger,
[Triggers].T.value('#IsAfterTrig', 'varchar(1)') AS IsAfterTrigger, [Triggers].T.value('#IsInsteadOfTrig', 'varchar(1)') AS IsInsteadOfTrigger, [Triggers].T.value('#IsDisabled', 'varchar(1)') AS IsDisabledTrigger
FROM #XmlTargetDB.nodes('//Tables/Table') AS DBTables(Name)
CROSS APPLY DBTables.Name.nodes('Columns/Column') AS Cols(C)
OUTER APPLY DBTables.Name.nodes('Indexes/Index') AS [Indexes](I)
OUTER APPLY I.nodes('IndexColumn') AS [IndexColumn](IC)
OUTER APPLY DBTables.Name.nodes('ForeignKeys/ForeignKey') AS ForeignKey(FK)
OUTER APPLY DBTables.Name.nodes('DefaultConstraints/Default') AS Defaults(D)
OUTER APPLY DBTables.Name.nodes('CheckConstraints/Check') AS Checks(C)
OUTER APPLY DBTables.Name.nodes('Triggers/Trigger') AS [Triggers](T)
I am pretty new to databases (normally stored everything locally on CSV or HDFS files). I have access to MS SQL Server and I have been trying to load some historical data into the database. I was successful finally and I want to redo my steps for other data, but first I want to make sure that I am being efficient.
1) I create a table using a query and specify the data type of each column and the number of characters (I used len() in Excel and then added a buffer just in case)
2) I then created an XML file, example is below. I notated the delimiter and the data type for each column along with things like max_length and precision/scale where needed.
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="6" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="7" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="10"/>
<FIELD ID="8" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="9" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="10" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="11" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="3"/>
<FIELD ID="12" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="3"/>
<FIELD ID="13" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="14" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="15" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="16" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="17" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="18" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="19" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="20" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="21" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="22" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="23" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="24" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="25" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="26" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="27" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="28" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="29" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="30" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="31" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="32" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="33" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="34" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="35" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="36" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="37" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="38" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="39" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="40" xsi:type="CharTerm" TERMINATOR=","/>
<FIELD ID="41" xsi:type="CharTerm" TERMINATOR="\r\n"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="date" xsi:type="SQLDATE"/>
<COLUMN SOURCE="2" NAME="time" xsi:type="SQLDATETIME"/>
<COLUMN SOURCE="3" NAME="other_date" xsi:type="SQLDATE"/>
<COLUMN SOURCE="4" NAME="other_time" xsi:type="SQLDATETIME"/>
<COLUMN SOURCE="5" NAME="client_id" xsi:type="SQLINT"/>
<COLUMN SOURCE="6" NAME="location_id" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="7" NAME="other_id" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="8" NAME="stuff_1" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="9" NAME="stuff_2" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="10" NAME="email" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="11" NAME="something_active" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="12" NAME="something_active" xsi:type="SQLVARYCHAR"/>
<COLUMN SOURCE="13" NAME="etc" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="14" NAME="etc2" xsi:type="SQLDECIMAL" PRECISION="18" SCALE="2"/>
<COLUMN SOURCE="15" NAME="filler" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="16" NAME="filler" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="17" NAME="fk1" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="18" NAME="fk2" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="19" NAME="fk3" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="20" NAME="fk4" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="21" NAME="fk5" xsi:type="SQLSMALLINT"/>
<COLUMN SOURCE="22" NAME="fk6" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="23" NAME="fk7" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="24" NAME="data1" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="25" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="26" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="27" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="28" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="29" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="30" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="31" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="32" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="33" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="34" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="35" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="36" NAME="data" xsi:type="SQLDECIMAL" PRECISION="5" SCALE="2"/>
<COLUMN SOURCE="37" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="38" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="39" NAME="data" xsi:type="SQLTINYINT"/>
<COLUMN SOURCE="40" NAME="data" xsi:type="SQLDECIMAL" PRECISION="5" SCALE="0"/>
<COLUMN SOURCE="41" NAME="data" xsi:type="SQLTINYINT"/>
</ROW>
</BCPFORMAT>
This worked and it was pretty fast for a few million rows. My question now is whether I need to do this for each file I am going to import (each is probably around 1 million to about 20 million records)? It is somewhat tedious creating a separate CREATE TABLE query and XML file per file, but it should only be a one time thing. Just want to make sure that I am not missing out on a more efficient approach to this whole thing.