venerdì 30 agosto 2013

Articoli SQL - Articolo 7 - 30/08/2013: Omissione del carattere interruzione di riga quando si copia da SQL Server Management Studio 2012 ad Excel.

Sicuramente chi di voi ha aggiornato il proprio client di amministrazione database di casa Microsoft alla versione 2012, si sarà accorto che copiando dati estratti da query che contengono una o più interruzioni di riga (il classico invio o in gergo carriage return) su un foglio Excel, l'SSMS non ignora l'interruzione di riga come facevano le versioni del Management Studio 2008 e 2005, ma la mantiene andando a salvare su Excel le informazioni seguite da ogni carriage return su righe diverse.

Questa scelta fatta da Microsoft può essere discutibile nel senso che è vero che effettivamente se una cella del database contiene, tra gli altri caratteri, il carriage return (l'invio), durante la copia, così come vengono mantenuti gli spazi e tutto il resto della punteggiatura, è giusto che venga mantenuto anche il CR, però questo potrebbe creare problemi (o vantaggi a seconda del caso), se vogliamo andare ad incollare i dati ad esempio su un file Excel.

Creazione tabella di esempio:

declare @Anagrafe table(Test nvarchar(20))
insert into @Test(Test)
values('test' + char(13) + 'test')
Query di esempio:
select test from Anagrafe
where ID = '10000'

Risultato query:


Copia del risultato su Excel:


Questo perchè i due test erano stati inseriti a database premendo un invio tra di essi.

E' possibile risolvere l'inghippo, a meno che il risultato in questo formato non vada già bene, applicando una funzione di REPLACE, che vada appunto a sostituire i caratteri char(10) ovvero il line feed e il char(13) ovvero il carriage return con un spazio vuoto ad esempio, o qualunque altro carattere a voi sembri più consono.

Soluzione:

select REPLACE(CAST(test as varchar(MAX)), CHAR(13) + CHAR(10), ' ') from Anagrafe
where ID = '10000'

Risultato query:



Copia del risultato su Excel:



0 commenti:

Posta un commento

Grazie per aver visitato TheICTAuthority. Nel caso in cui il tuo commento sia una richiesta ti risponderemo al più presto.