Parametro text non permesso in stored procedure

giovedì 17 aprile 2008 - 13.27

gonzalezh Profilo | Junior Member

Ciao,

Io ho una stored procedure che legge un campo di tipo text da una tabella di un db.
Questa stored procedure è chiamata all'interno di un'altra stored.
Ma SQL mi dice che non posso utilizzare campi di tipo text in una subquery.

Come posso fare visto che non posso cambiare tipo dato nel db?

Ho provato a fare un cast al tipo nvarchar pero il campo di tipo text è più lungo del valore maximo del nvarchar.

Grazie in anticipo.

lbenaglia Profilo | Guru

>Io ho una stored procedure che legge un campo di tipo text da
>una tabella di un db.
>Questa stored procedure è chiamata all'interno di un'altra stored.
>Ma SQL mi dice che non posso utilizzare campi di tipo text in
>una subquery.

Potresti postare un esempio completo con la struttura della tabella (CREATE TABLE), delle stored procedure (CREATE PROCEDURE) e della query che genera il problema?

>Grazie in anticipo.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

gonzalezh Profilo | Junior Member

CIAO,

ORA MI SI E' PRESENTATO UN'ALTRO PROBLEMA.
NEL FILE ALLEGATO C'E' UNA STORED PROCEDURE CHE LEGGE UN ATTRIBUTO DI UN FILE XML.
LA STORED RICEVE COME PARAMETRO IL PERCORSO DEL ATTRIBUTO DA LEGGERE E LA STRINGA XML.
CON IL PRIMO TEST NON MI DA ALCUN RESULTATO, QUANDO IO MI ASPETTO COME RISULTATO '31/12/2007'
CON IL SECONDO INVECE MI RESTITUISCE 7 COME MI ASPETTO.

IN COSA SBAGLIO,

MI POTETE AIUTARE.

GRAZIE.


lbenaglia Profilo | Guru

>IN COSA SBAGLIO,

1) Nel body della stored procedure sostituisci SELECT PREV_DATE con SELECT Value (o SELECT *)

2) L'XML è case sensitive, pertanto l'elemento <PARAMETRI> deve avere lo stesso case sia nella stringa XPath che nel documento XML.

Osserva il seguente esempio (semplificato):

USE tempdb; GO CREATE PROCEDURE dbo.up_ErmasExtractPrevDate( @PERCORSO NVARCHAR(100), @sXML TEXT ) AS DECLARE @iDoc INT; EXEC sp_xml_preparedocument @iDoc OUTPUT, @sXML; SELECT Value FROM OPENXML(@iDoc, @PERCORSO, 1) WITH (VALUE NVARCHAR(10) '@VALUE') EXEC sp_xml_removedocument @iDoc RETURN GO EXEC dbo.up_ErmasExtractPrevDate '/PARAMETRI/ELABORATION_PARAMETERS/ANALISI_CONSUNTIVA/PREV_DATE' , ' <PARAMETRI> <ELABORATION_PARAMETERS> <ANALISI_CONSUNTIVA> <PREV_DATE VALUE="31/12/2007"/> </ANALISI_CONSUNTIVA> </ELABORATION_PARAMETERS> </PARAMETRI>'; /* Output: Value ---------- 31/12/2007 (1 row(s) affected) */ DROP PROCEDURE dbo.up_ErmasExtractPrevDate;

>GRAZIE.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

gonzalezh Profilo | Junior Member

HO RISOLTO.

GRAZIE MILLE.

lbenaglia Profilo | Guru

>HO PROVATO A CAMBIARE PREV_DATE CON VALUE, MA CON L'INTERO XML
>(QUELLO LUNGO) NON MI VIENE RESTITUITO NULLA. COSA STRANA! E'
>POSSIBILE?
>
>E' POSSIBILE CHE CI SIA QUALCHE ERRORE NEL FILE XML?

Hai visto il mio esempio? Il case di PARAMETRI è maiuscolo sia per @PERCORSO che per @sXML.
Fai questa modifica e vedrai che funzionerà anche a te.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5