>CREATE TABLE [dbo].[articoli](
> [num] [bigint] IDENTITY(1,1) NOT NULL,
> [catcod] [varchar](20) NULL,
> [catdes] [varchar](50) NULL,
> [lincod] [varchar](20) NULL,
> [lindes] [varchar](50) NULL,
> [blecod] [varchar](20) NULL,
> [bledes] [varchar](50) NULL,
> [eticod] [varchar](20) NULL,
> [etides] [varchar](50) NULL,
> [artcod] [varchar](20) NULL,
> [artdes] [varchar](50) NULL,
>CONSTRAINT PK_articoli PRIMARY KEY(artcod)
>);
La definizione della tabella non è corretta dato che una PRIMARY KEY può essere definita esclusivamente su una o più colonne NOT NULL.
Inoltre hai definito l'attributo IDENTITY per la colonna [num], ma il file XML contiene un elemento chiamato num che presumo tu voglia importare...
Prova a dare un'occhiata al seguente esempio:
USE tempdb;
CREATE TABLE dbo.articoli(
num bigint NOT NULL,
catcod varchar(20) NULL,
catdes varchar(50) NULL,
lincod varchar(20) NULL,
lindes varchar(50) NULL,
blecod varchar(20) NULL,
bledes varchar(50) NULL,
eticod varchar(20) NULL,
etides varchar(50) NULL,
artcod varchar(20) NOT NULL,
artdes varchar(50) NULL,
CONSTRAINT PK_articoli PRIMARY KEY(artcod)
);
DECLARE @Articoli xml;
SET @Articoli = (
SELECT Q.BulkColumn
FROM OPENROWSET(BULK 'D:\Users\Lorenzo\Downloads\Articoli.xml', SINGLE_CLOB) AS Q
);
INSERT dbo.articoli
SELECT
myColumn.value('Num[1]', 'bigint')
, myColumn.value('Catcod[1]', 'varchar(20)')
, myColumn.value('Catdes[1]', 'varchar(50)')
, myColumn.value('Lincod[1]', 'varchar(20)')
, myColumn.value('Lindes[1]', 'varchar(50)')
, myColumn.value('Blecod[1]', 'varchar(20)')
, myColumn.value('Bledes[1]', 'varchar(50)')
, myColumn.value('Eticod[1]', 'varchar(20)')
, myColumn.value('Etides[1]', 'varchar(50)')
, myColumn.value('Artcod[1]', 'varchar(20)')
, myColumn.value('Artdes[1]', 'varchar(50)')
FROM @Articoli.nodes('/Articoli/Articolo') AS myTable(myColumn);
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org