54 messaggi dal 15 giugno 2004
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

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.