Salve sto scrivendo un stored procedure che estrae i dati da un file xml e li inserisce in una tabella del database.
Per caricare il file xml in una variabile uso:
SET @xmlDoc = (SELECT TB.BulkColumn FROM OPENROWSET(BULK 'C:\ECHOS_CLIENT.XML' , SINGLE_CLOB) AS TB);
Il problema è che vorrei parametrizzare questa procedura aggiungendo un parametro in input @XMLPATH che identifichi il percorso completo del file xml;
per cui dovrei cambiare il codice appena scritto in:
SET @xmlDoc = (SELECT TB.BulkColumn FROM OPENROWSET(BULK @XMLPATH , SINGLE_CLOB) AS TB);
Ho quindi sostituito 'C:\ECHOS_CLIENT.XML' con @XMLPATH non sapendo che OPENROWSET non accetta variabili come parametro!
Esiste un'alternativa?Il resto della stored procedure è questo:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[SP_INSERT_ECHOS_XMLLOG]
@XMLPATH NVARCHAR(200)
AS
DECLARE @xmlDoc xml;
DECLARE @hdoc int;
BEGIN
SET NOCOUNT ON;
/* Carico l'intero file XML in una variabile XML */
SET @xmlDoc = (SELECT TB.BulkColumn FROM OPENROWSET(BULK 'C:\ECHOS_CLIENT.XML' , SINGLE_CLOB) AS TB);
/* Eseguo la stessa query utilizzando la funzione OPENXML */
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xmlDoc;
/* Inserimento nella tabella degli errori dei dati xml*/
INSERT INTO [DB_ECHOS_TEST].[dbo].[ERRORE]
(
[applicazione]
,[descrizione]
,[eccezione]
,[data]
,[pagina]
,[funzione]
,[hostname]
,[codOperatore]
)
SELECT [applicazione]
,[descrizione]
,[eccezione]
,[data]
,[pagina]
,[funzione]
,[hostname]
,[codOperatore]
FROM OPENXML (@hdoc, 'DocumentElement/echos_log_row', 1)
WITH (
applicazione nvarchar(50) 'applicazione',
descrizione nvarchar(250) 'descrizione',
eccezione nvarchar(400) 'eccezione',
data nvarchar(10) 'data',
pagina nvarchar(50) 'pagina',
funzione char(20) 'funzione',
hostname char(20) 'hostname',
codOperatore int 'codOperatore'
);
EXEC sp_xml_removedocument @hdoc;
END