Errore di troncamento da ntext a nvarchar (max)

mercoledì 03 novembre 2010 - 09.42

Bolo Profilo | Junior Member

Buongiorno!

Avrei la necessità dio convertire un campo ntext in nvarchar (dato che con il ntext non posso utilizzare la funzione group by).
Pur utilizzando il campo nvarchar (max) mi da l'errore dovuto a problemi di troncamento, qualcuno ha idea di come posso aggirarlo?

micto27 Profilo | Senior Member

Ciao,
ma a che lunghezza può arrivare, nel tuo caso, il campo NTEXT?

... select MAX(DATALENGTH(colonna ntext)) from tabella;

Oltre i 4000 caratteri?

Michele

Bolo Profilo | Junior Member

No, attualmente il max che ho è 1600, farei un 2000 giusto per arrotondare

micto27 Profilo | Senior Member

ma se esegui

SELECT CONVERT(NVARCHAR(2000), colonna) FROM TABELLA

ottieni errori?

Ciao

Bolo Profilo | Junior Member

Eseguendo il codice di seguito mi da l'errore:

Msg 8152, Level 16, State 13, Line 23
I dati di tipo string o binary verrebbero troncati.

Nella tabella CLA_CUST_TAB_REPORT2 il campo COMMENTI è nvarchar (2000)

INSERT INTO CLA_CUST_TAB_REPORT2

(TIPO, CODICE, DESCRIZIONE, SEDE, OPERATORE,
INIZIO_EFF, FINE_EFF, INIZIO, FINE,
ORD_DIU, ORD_NOT, ORD_FES, ORD_FEN,
ORD_EXT_DIU, ORD_EXT_NOT, ORD_EXT_FES, ORD_EXT_FEN,
STR_DIU, STR_NOT, STR_FES, STR_FEN,
FERIE, PERMESSO, MALATTIA, CAUSALE_IN, CAUSALE_OUT, COMMENTI)

-- Aggiungo i record riguardanti i turni ORDINARI

SELECT UCO_DESC,
EVT_CODE,
EVT_DESC,
EVT_OBJECT,
EVT_PERSON,
dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE, 'i'),
dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE, 'f'),
dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE, 'ic'),
dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE, 'fc'),
dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'fc'),EVT_CODE,(0),(0),(0)),
dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'fc'),EVT_CODE,(0),(1),(0)),
dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'fc'),EVT_CODE,(1),(0),(0)),
dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'fc'),EVT_CODE,(1),(1),(0)),
dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'fc'),EVT_CODE,(0),(0),(1)),
dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'fc'),EVT_CODE,(0),(1),(1)),
dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'fc'),EVT_CODE,(1),(0),(1)),
dbo.CUST_ORE_LAVORATE (dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'ic'),dbo.CUST_RESTITUISCI_ORE_REPORT (EVT_CODE,'fc'),EVT_CODE,(1),(1),(1)),
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
EVT_UDFCHAR01,
EVT_UDFCHAR02,
CONVERT(NVARCHAR(2000), ADD_TEXT)

FROM R5EVENTS

LEFT OUTER JOIN R5PROPERTYVALUES
ON EVT_CODE = PRV_CODE
LEFT OUTER JOIN R5UCODES
ON EVT_JOBTYPE = UCO_CODE
LEFT OUTER JOIN r5addetails
ON evt_code = add_code

WHERE (EVT_JOBTYPE = 'UTNTO' or EVT_JOBTYPE = 'UTNSP') AND EVT_STATUS = 'C' AND
(PRV_PROPERTY = 'UTNCIN' OR PRV_PROPERTY = 'UTNCOUT' OR PRV_PROPERTY = 'UTNIN' OR PRV_PROPERTY = 'UTNOUT')

GROUP BY
EVT_JOBTYPE, EVT_CODE, EVT_DESC, EVT_PERSON, EVT_OBJECT, UCO_DESC, EVT_UDFCHAR01, EVT_UDFCHAR02, CONVERT(NVARCHAR(2000), ADD_TEXT)

micto27 Profilo | Senior Member

Se anteponi al codice che hai postato...

SET ANSI_WARNINGS OFF

cambia qualcosa?

Ciao

Bolo Profilo | Junior Member

Risolto l'inghippo, dopo aver spremuto a lungo le meningi la conclusione è che l'errore non era lì!!!

Erano i due campi EVT_UDFCHAR01 e EVT_UDFCHAR02 che avevano meno caratteri di quelli necessari... aaaaarrrrgghhhh

Il codice che ho postato funziona... grazie comunque dei consigli e buona serata a te!!!
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5