<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Di Cesare</title>
	<atom:link href="http://www.dicesare.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dicesare.com</link>
	<description></description>
	<lastBuildDate>Tue, 23 Mar 2010 22:38:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SQL: conteggi per fasce di valori</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-conteggi-per-fasce-di-valori/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-conteggi-per-fasce-di-valori/#comments</comments>
		<pubDate>Tue, 23 Mar 2010 11:02:56 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[CASE]]></category>
		<category><![CDATA[COUNT()]]></category>
		<category><![CDATA[GROUP BY]]></category>
		<category><![CDATA[INTERVAL]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[sql server]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/programmazione/sql/sql-conteggi-per-fasce-di-valori/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00015299999999996 seconds-->
<!---Displayed in 0.005893 seconds.-->
In questo articolo spiegherò come ottenere una classificazione per fasce di una serie di valori.

Una delle classificazione classiche di una lista di valori è per fasce (di prezzo, ad esempio): quanti articoli costano meno di 100 Euro? Quanti tra 100 e 200? e così via.
La soluzione migliore sarebbe di inserire la fascia già nel record [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 9.0999999999952E-5 seconds-->
<!---Displayed in 0.0050589999999999 seconds.-->
<p>In questo articolo spiegherò come ottenere una classificazione per fasce di una serie di valori.<br />
<span id="more-1038"></span><br />
Una delle classificazione classiche di una lista di valori è per fasce (di prezzo, ad esempio): quanti articoli costano meno di 100 Euro? Quanti tra 100 e 200? e così via.</p>
<p>La soluzione migliore sarebbe di inserire la fascia già nel record da classificare, magari con un trigger. Questa però è una soluzione &#8217;statica&#8217;, che prevede una classificazione rigida decisa a priori.</p>
<p>Potrebbe invece essere necessario creare una classificazione arbitraria, momentanea e non decisa a priori.</p>
<p>Per ottenere questi tipo di prospetto, si può usare una combinazione di GROUP BY e CASE, come nell&#8217;esempio che segue:</p>
<pre class="brush: sql">
SELECT
   COUNT(Prezzo) AS [Numero Articoli],
	(CASE
		WHEN Prezzo&lt;1000 THEN &#039;Bassa&#039;
		WHEN Prezzo&gt;10000 THEN &#039;Alta&#039;
		ELSE &#039;Media&#039; END
         ) AS [Fascia di prezzo]
FROM
	Articoli
GROUP BY
	(CASE
		WHEN Prezzo&lt;1000 THEN &#039;Bassa&#039;
		WHEN Prezzo&gt;10000 THEN &#039;Alta&#039;
		ELSE &#039;Media&#039; END
        )
</pre>
<p>Otterremo quindi un elenco di quanti articoli sono nella fascia di prezzo &#8216;bassa&#8217; (meno di 1.000 Euro), quanti nella fascia &#8216;Media&#8217; (tra 1.000 e 10.000), e quanti nella fascia alta (più di 10.000 Euro).</p>
<p>Un&#8217;altra soluzione consiste nell&#8217;utilizzare una tabella di appoggio (fissa o temporanea) dove dichiarare le varie fasce, ed ottenere la classificazione con una JOIN.</p>
<p>Vedremo questa soluzione in un prossimo articolo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-conteggi-per-fasce-di-valori/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL: INSERT o UPDATE in automatico</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-insert-o-update-in-automatico/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-insert-o-update-in-automatico/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 17:07:22 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[INSERT INTO]]></category>
		<category><![CDATA[JOIN]]></category>
		<category><![CDATA[LEFT JOIN]]></category>
		<category><![CDATA[MSSQL]]></category>
		<category><![CDATA[NULL]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[UPSERT]]></category>
		<category><![CDATA[Utilità]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/programmazione/sql/sql-insert-o-update-in-automatico/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00011799999999995 seconds-->
<!---Displayed in 0.006325 seconds.-->
Come far decidere direttamente allo script SQL se fare una INSERT o una UPDATE.

Quante volte vi sarà capitato di dover aggiornare una tabella con dei dati provenienti da una fonte esterna? Nella maggioranza dei casi, i dati da importare possono sia essere nuovi rispetto alla vostra tabella che essere degli aggiornamenti.
Scorrere con un cursore la [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00010199999999994 seconds-->
<!---Displayed in 0.0059629999999999 seconds.-->
<p>Come far decidere direttamente allo script SQL se fare una INSERT o una UPDATE.<br />
<span id="more-1022"></span><br />
Quante volte vi sarà capitato di dover aggiornare una tabella con dei dati provenienti da una fonte esterna? Nella maggioranza dei casi, i dati da importare possono sia essere nuovi rispetto alla vostra tabella che essere degli aggiornamenti.<br />
Scorrere con un cursore la tabella da importare e vedere record per record se è una novità o un aggiornamento è una scelta poco efficiente. Quale può essere allora una soluzione più performante?</p>
<h3>Sfruttare la JOIN</h3>
<p>La domanda necessaria da farsi è questa: <em>in base a quale chiave riesco a capire se un record è una novità o un aggiornamento?</em></p>
<p>Una volta trovata la risposta, il meccanismo è semplice:</p>
<ul>
<li>si metteranno in JOIN le due tabelle (da importare ed esistente) relazionandole proprio con la chiave individuata</li>
<li>la JOIN sarà una LEFT JOIN, con a sinistra la tabella da importare, e a destra quella già esistente</li>
<li>come noto, la LEFT JOIN restituirà una serie di colonne NULL nella tabella di destra nel caso non ci siano corrispondenze: sfruttando questa caratteristica potremo quindi individuare quali sono i record già esistenti e quali invece sono nuovi</li>
<li> ovviamente quelli nuovi saranno quelli con contenuto NULL, che sta a significare che i record della tabella di sinistra (da importare) <em>NON</em> sono già esistenti nella tabella di destra (esistente) e vanno quindi inseriti</li>
<li>quelli invece non-NULL sono già esistenti, e quindi andranno aggiornati</li>
<li>attenzione ad eseguire <em>PRIMA</em> la UPDATE e poi la INSERT; in caso contrario verranno aggiornati anche i record appena inseriti: i dati non vengono assolutamente danneggiati, ma sicuramente ci sarà una perdita di tempo</li>
</ul>
<h3>Esempio pratico</h3>
<p>Un esempio aiuterà a comprendere più facilmente il meccanismo.</p>
<p>Immaginiamo di dover aggiornare una tabella di Dati Anagrafici con dei dati che ci vengono inviati periodicamente da un corrispondente; in questo caso, la chiave identificativa (univoca) sarà la Partita IVA.</p>
<p>Per comodità, avremo già importato i dati del nostro corrispondente in una tabella temporanea; i nomi delle colonne saranno gli stessi.</p>
<p>Impostiamo quindi la JOIN:</p>
<pre class="brush: sql">
-- TS=TableSource, TT=TableTarget
SELECT
   TS.Descrizione, TS.PartitaIVA,
   TT.Descrizione, TT.PartitaIVA
FROM
   #tmpAnag TS LEFT JOIN ANAGRAFICHE TT ON TS.PartitaIVA=TT.PartitaIVA
</pre>
<p>Quando eseguiremo questa query, vederemo elencate delle corrispondenze esatte nel caso di record da aggiornare, mentre invece noteremo TT.Descrizione e TT.PartitaIVA a NULL nel caso di novità.</p>
<p>Sfrutteremo quindi la JOIN di riferimento per impostare prima una UPDATE&#8230;FROM&#8230;JOIN per fare gli aggiornamenti, poi una INSERT&#8230;SELECT&#8230;JOIN per fare gli inserimenti.</p>
<h3>UPDATE</h3>
<pre class="brush: sql">
-- TS=TableSource, TT=TableTarget
UPDATE ANAGRAFICHE SET
      TT.Denominazione=TS.Denominazione,
      TT.Indirizzo=TS.Indirizzo,
      TT.CAP=TS.CAP,
      TT.Localita=TS.Localita,
      TT.PartitaIVA=TS.PartitaIVA
   FROM
      #tmpAnag TS LEFT JOIN ANAGRAFICHE TT ON TS.PartitaIVA=TT.PartitaIVA
      -- fa correttamente la JOIN? Quindi c&#039;è GIA&#039;! ---&gt; UPDATE
</pre>
<h3>INSERT</h3>
<pre class="brush: sql">
-- TS=TableSource, TT=TableTarget
INSERT INTO ANAGRAFICHE
     (Denominazione,
      Indirizzo,
      CAP,
      Localita,
      PartitaIVA)
   SELECT
      TS.Denominazione,
      TS.Indirizzo,
      TS.CAP,
      TS.Localita,
      TS.PartitaIVA
   FROM
      #tmpAnag TS LEFT JOIN ANAGRAFICHE TT ON TS.PartitaIVA=TT.PartitaIVA
   WHERE TT.PartitaIVA IS NULL
   -- non fa la JOIN? Quindi NON c&#039;è! ---&gt; INSERT
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-insert-o-update-in-automatico/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL: convertire un valore float in un varchar</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-convertire-un-valore-float-in-un-varchar/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-convertire-un-valore-float-in-un-varchar/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 23:10:11 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[CAST]]></category>
		<category><![CDATA[CONVERT]]></category>
		<category><![CDATA[DATA TYPE]]></category>
		<category><![CDATA[DECIMAL]]></category>
		<category><![CDATA[FLOAT]]></category>
		<category><![CDATA[NVARCHAR]]></category>
		<category><![CDATA[sql server]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/programmazione/sql/sql-convertire-un-valore-float-in-un-varchar/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00013200000000002 seconds-->
<!---Displayed in 0.0073840000000001 seconds.-->
In questo articolo spiegherò come convertire in sicurezza una colonna float in una colonna varchar.

Mi è recentemente capitato di dover trasformare dei valori contenuti originariamente in una colonna float in un&#8217;altra colonna di tipo varchar. Il caso pratico si verifica facilmente, ad esempio con i numeri di telefono, partita iva, ecc.
La prima cosa che viene [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 8.6999999999948E-5 seconds-->
<!---Displayed in 0.005436 seconds.-->
<p>In questo articolo spiegherò come convertire in sicurezza una colonna float in una colonna varchar.<br />
<span id="more-1018"></span><br />
Mi è recentemente capitato di dover trasformare dei valori contenuti originariamente in una colonna float in un&#8217;altra colonna di tipo varchar. Il caso pratico si verifica facilmente, ad esempio con i numeri di telefono, partita iva, ecc.</p>
<p>La prima cosa che viene in mente è di effettuare una conversione diretta.</p>
<pre class="brush: sql">
ALTER TABLE nome_tabella ALTER COLUMN VARCHAR(11)
</pre>
<p>Sembra tutto corretto, ma il risultato è inaccettabile; infatti la colonna trasformata conterrà i dati con notazione scientifica. Ad esempio il numero 12345678901 diventa 1.23457e+010</p>
<p>Questo perché il formato float contiene il numero in virgola mobile, e la sua rappresentazione alfanumerica è proprio con notazione scientifica.</p>
<p>Nei casi citati abbiamo però a che fare con numeri interi (senza decimali), per cui possiamo ottenere il risultato ottenuto tramite un passaggio intermedio.</p>
<pre class="brush: sql">
ALTER TABLE nome_tabella ALTER COLUMN DECIMAL(11,0)
</pre>
<p>In questo modo abbiamo <em>fissato</em> il numero, togliendolo dalla scomoda (per il nostro fine) situazione di numero in virgola mobile.</p>
<p>A questo punto possiamo effettuare la nostra conversione:</p>
<pre class="brush: sql">
ALTER TABLE nome_tabella ALTER COLUMN VARCHAR(11)
</pre>
<p>La colonna numerica diventerà alfanumerica mantenendo il numero esattamente come ce lo aspettiamo.</p>
<p>Nell&#8217;esempio ho usato una ALTER, ma lo stesso ragionamento vale anche per le conversioni effettuate con CONVERT e CAST, come nell&#8217;esempio che segue:</p>
<pre class="brush: sql">
DECLARE @float AS FLOAT
SELECT @float=12345678901
PRINT CONVERT(VARCHAR, @float)
PRINT CONVERT(VARCHAR, CONVERT(DECIMAL(11,0), @float))
</pre>
<p>Il metodo funziona anche con NVARCHAR.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-convertire-un-valore-float-in-un-varchar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come recuperare una pratica archiviata per errore</title>
		<link>http://www.dicesare.com/applicativi/elite/come-recuperare-una-pratica-archiviata-per-errore/</link>
		<comments>http://www.dicesare.com/applicativi/elite/come-recuperare-una-pratica-archiviata-per-errore/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 10:20:56 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Élite]]></category>
		<category><![CDATA[archivio]]></category>
		<category><![CDATA[avvocati]]></category>
		<category><![CDATA[avvocato]]></category>
		<category><![CDATA[blugeco]]></category>
		<category><![CDATA[pratica]]></category>
		<category><![CDATA[pratiche]]></category>
		<category><![CDATA[software studi legali]]></category>
		<category><![CDATA[studio legale]]></category>
		<category><![CDATA[studio legale associato]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/applicativi/elite/come-recuperare-una-pratica-archiviata-per-errore/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 9.1000000000063E-5 seconds-->
<!---Displayed in 0.00595 seconds.-->
Avete archiviato una pratica per errore e volete recuperarla e riportarla nell&#8217;archivio corrente. Come fare?
Come recuperare una pratica archiviata per errore
Élite dispone di una comoda funzione che permette di archiviare una o più pratiche; in effetti, l&#8217;archiviazione è semplicemente uno spostamento di una pratica (con le informazioni ad essa collegate, quali scadenze, prestazioni, ecc.) da [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 9.7999999999931E-5 seconds-->
<!---Displayed in 0.0068509999999999 seconds.-->
<p>Avete archiviato una pratica per errore e volete recuperarla e riportarla nell&#8217;archivio corrente. Come fare?<span id="more-1006"></span></p>
<p><strong>Come recuperare una pratica archiviata per errore</strong></p>
<hr />Élite dispone di una comoda funzione che permette di archiviare una o più pratiche; in effetti, l&#8217;archiviazione è semplicemente uno spostamento di una pratica (con le informazioni ad essa collegate, quali scadenze, prestazioni, ecc.) da un archivio all&#8217;altro; nel caso classico di archiviazione, lo spostamento è dall&#8217;archivio corrente (quello cioè delle pratiche correntemente aperte e in lavorazione) a quello storico (cioè l&#8217;archivio delle pratiche chiuse ed archiviate).</p>
<p>Come abbiamo detto, è possibile effettuare l&#8217;archiviazione di più pratiche; può quindi capitare di includere nel blocco di pratiche anche una pratica che non andrebbe in effetti archiviata.</p>
<p>Come fare per recuperarla, e riportarla quindi dall&#8217;archivio storico all&#8217;archivio corrente?</p>
<p>Dato che l&#8217;operazione di archiviazione altro non è che un semplice spostamento di archivio, sarà sufficiente effettuare l&#8217;operazione inversa.</p>
<ul>
<li>portatevi nell&#8217;archivio Storico</li>
<li>rintracciate e selezionate la pratica che volete recuperare</li>
<li>chiedetene nuovamente l&#8217;archiviazione (dallo Storico verrà riportata nel Corrente)</li>
<li>nella finestra di archiviazione selezionate tutte le informazioni e chiedete di <strong><span style="text-decoration: underline;">NON</span></strong>  &#8217;Mantenere le informazioni originali nell&#8217;archivio&#8217;</li>
<li>date quindi conferma</li>
<li>Élite riporterà la pratica nell&#8217;archivio di destinazione (cioè quello corrente)</li>
<li>al termine, riportatevi nell&#8217;archivio corrente</li>
</ul>
<p>Avrete così recuperato la pratica archiviata per errore.</p>
<hr />
<table border="0">
<tbody>
<tr>
<td><a href="http://elite.blugeco.com"><img class="alignnone size-medium wp-image-89" title="eli40logo" src="http://lnx.dicesare.com/wp-content/uploads/2008/09/eli40logo1.gif" alt="" width="109" height="41" /></a></td>
<td>
<h5>Élite è la procedura ideale per la gestione dello studio legale. Informazioni, prezzi e dimostrativo sul sito <a href="http://elite.blugeco.com" target="_blank">Blugeco</a>.</h5>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/applicativi/elite/come-recuperare-una-pratica-archiviata-per-errore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come inserire una prestazione con una descrizione molto lunga</title>
		<link>http://www.dicesare.com/applicativi/elite/come-inserire-una-prestazione-con-una-descrizione-molto-lunga/</link>
		<comments>http://www.dicesare.com/applicativi/elite/come-inserire-una-prestazione-con-una-descrizione-molto-lunga/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 18:22:54 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Élite]]></category>
		<category><![CDATA[avvocati]]></category>
		<category><![CDATA[avvocato]]></category>
		<category><![CDATA[blugeco]]></category>
		<category><![CDATA[parcella]]></category>
		<category><![CDATA[prestazioni]]></category>
		<category><![CDATA[software studi legali]]></category>
		<category><![CDATA[studio legale]]></category>
		<category><![CDATA[studio legale associato]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/applicativi/elite/come-inserire-una-prestazione-con-una-descrizione-molto-lunga/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 8.9000000000006E-5 seconds-->
<!---Displayed in 0.005044 seconds.-->
Avete bisogno di inserire una prestazione la cui descrizione supera i 120 caratteri. Come fare?
Come inserire una prestazione con una descrizione molto lunga
Élite, per la registrazione delle prestazioni, mette a disposizione 120 caratteri per inserire la descrizione; essi sono normalmente sufficienti, ma potrebbe presentarsi la necessità di inserire una descrizione ben più lunga.
Per poterlo fare [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.000137 seconds-->
<!---Displayed in 0.005989 seconds.-->
<p>Avete bisogno di inserire una prestazione la cui descrizione supera i 120 caratteri. Come fare?<span id="more-986"></span><strong></strong></p>
<p><strong>Come inserire una prestazione con una descrizione molto lunga</strong></p>
<hr />Élite, per la registrazione delle prestazioni, mette a disposizione 120 caratteri per inserire la descrizione; essi sono normalmente sufficienti, ma potrebbe presentarsi la necessità di inserire una descrizione ben più lunga.</p>
<p>Per poterlo fare basterà inserire nelle note della prestazione ciò che si scriverebbe normalmente nella descrizione; le note non hanno limiti di capienza, quindi potrete scrivere tutto quello che vi serve; nella descrizione invece metteremo <em><strong>come primo carattere</strong></em> un asterisco (*) o il simbolo # (cancelletto). </p>
<p>Ecco un esempio:</p>
<p><a href="http://www.dicesare.com/wp-content/uploads/note_parcella_1.PNG"><img src="http://www.dicesare.com/wp-content/uploads/note_parcella_1-292x300.PNG" alt="note_parcella_1" title="note_parcella_1" width="292" height="300" class="aligncenter size-medium wp-image-992" /></a></p>
<p>In fase di stampa parcella, Élite userà il contenuto delle note al posto della descrizione; la parcella apparirà pertanto così:<br />
<a href="http://www.dicesare.com/wp-content/uploads/note_parcella_2.PNG"><img src="http://www.dicesare.com/wp-content/uploads/note_parcella_2-300x298.PNG" alt="note_parcella_2" title="note_parcella_2" width="300" height="298" class="aligncenter size-medium wp-image-996" /></a><br />
In questo modo potrete inserire in parcella delle descrizioni lunghe quanto volete.</p>
<hr />
<table border="0">
<tbody>
<tr>
<td><a href="http://elite.blugeco.com"><img class="alignnone size-medium wp-image-89" title="eli40logo" src="http://lnx.dicesare.com/wp-content/uploads/2008/09/eli40logo1.gif" alt="" width="109" height="41" /></a></td>
<td>
<h5>Élite è la procedura ideale per la gestione dello studio legale. Informazioni, prezzi e dimostrativo sul sito <a href="http://elite.blugeco.com" target="_blank">Blugeco</a>.</h5>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/applicativi/elite/come-inserire-una-prestazione-con-una-descrizione-molto-lunga/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL: uso di una lista di valori in una SELECT&#8230;WHERE</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-uso-di-una-lista-di-valori-in-una-select-where/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-uso-di-una-lista-di-valori-in-una-select-where/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 12:38:59 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[ARRAY]]></category>
		<category><![CDATA[IN]]></category>
		<category><![CDATA[JOIN]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[WHERE]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/programmazione/sql/sql-server-2005-uso-di-una-lista-di-valori-in-una-select-where/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.000115 seconds-->
<!---Displayed in 0.005756 seconds.-->
In questo articolo spiegherò come effettuare una query SELECT&#8230;WHERE usando una lista di valori.

E&#8217; abbastanza comune dover effettuare delle query SQL usando una lista di valori anziché un valore singolo.
L&#8217;operatore OR
Questa operazione viene effettuata normalmente usando l&#8217;operatore OR.
Se ad esempio vogliamo selezionare i clienti che si trovano nelle provincie di Milano e Como, basterà scrivere [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.000128 seconds-->
<!---Displayed in 0.007345 seconds.-->
<p>In questo articolo spiegherò come effettuare una query SELECT&#8230;WHERE usando una lista di valori.<br />
<span id="more-934"></span><br />
E&#8217; abbastanza comune dover effettuare delle query SQL usando una lista di valori anziché un valore singolo.</p>
<h4>L&#8217;operatore <strong>OR</strong></h4>
<p>Questa operazione viene effettuata normalmente usando l&#8217;operatore OR.</p>
<p>Se ad esempio vogliamo selezionare i clienti che si trovano nelle provincie di Milano e Como, basterà scrivere una query così:</p>
<pre class="brush: sql">
SELECT
   Denominazione, Indirizzo, Localita
FROM
   Clienti
WHERE
   Provincia=&#039;MI&#039; OR Provincia=&#039;CO&#039;
</pre>
<p>L&#8217;operazione però diventa lunga e tediosa se la lista contiene molti valori: pensate infatti a cosa diventerebbe la query riportata sopra per dieci o più provincie.</p>
<h4>L&#8217;operatore <strong>IN</strong></h4>
<p>L&#8217;operatore IN dell&#8217;istruzione SELECT di SQL Server permette di semplificare notevolmente la scrittura della query.</p>
<p>Tornando al nostro esempio, per selezionare i clienti che si trovano nelle provincie di Milano e Como, basterà riscrivere la query così:</p>
<pre class="brush: sql">
SELECT
   Denominazione, Indirizzo, Localita
FROM
   Clienti
WHERE
   Provincia IN (&#039;MI&#039;,&#039;CO&#039;)
</pre>
<p>Il motore SQL elaborerà il contenuto della lista inserita tra parentesi e ri-trasformerà la query espandendo la IN in una serie di OR, per poi eseguirla normalmente.</p>
<p>Già da questo breve esempio è facile intuire quanto la stesura della query venga semplificata; e il livello di semplificazione aumenta all&#8217;aumentare degli elementi contenuti nella IN.</p>
<p>Ovviamente la stessa sintassi può essere usata anche per valori numerici.</p>
<pre class="brush: sql">
SELECT
   Denominazione, Indirizzo, Localita
FROM
   Clienti
WHERE
   Tipo IN (2,7,12,14,35,36,37)
</pre>
<h4>Uso con Stored Procedures</h4>
<p>Nascerà sicuramente la necessità di usare questa sintassi con una Stored Procedure (SP), passando i valori con un parametro.</p>
<p>Immaginiamo allora una SP così:</p>
<pre class="brush: sql">
Create Procedure usp_Cerca_Clienti (@pLista AS VARCHAR(MAX))
AS
BEGIN

   SELECT
      Denominazione, Indirizzo, Localita
   FROM
      Clienti
   WHERE
      Provincia IN (@pLista)

END
</pre>
<p>Qui iniziano subito le difficoltà, già all&#8217;atto del richiamo della SP. Avremo infatti delle difficoltà a passare il parametro; se proviamo così:</p>
<pre class="brush: sql">
EXEC usp_Cerca_Clienti @pLista=&#039;MI,CO&#039;
</pre>
<p>la SP svolta diventerà:</p>
<pre class="brush: sql">
SELECT
   Denominazione, Indirizzo, Localita
FROM
   Clienti
WHERE
   Provincia IN (&#039;MI,CO&#039;)
</pre>
<p>che ovviamente non ci darà alcun risultato (non esiste infatti la provincia &#8216;MI,CO&#8217;)</p>
<p>Se invece proviamo così:</p>
<pre class="brush: sql">
EXEC usp_Cerca_Clienti @pLista=&#039;&#039;MI&#039;,&#039;CO&#039;&#039;
</pre>
<p>riceveremo un errore di sintassi.</p>
<p>Anche con valori numerici avremo un errore; infatti se proviamo così:</p>
<pre class="brush: sql">
EXEC usp_Cerca_Clienti_per_Tipo @pLista=&#039;1,4&#039;
</pre>
<p>la SP svolta diventerà:</p>
<pre class="brush: sql">
SELECT
   Denominazione, Indirizzo, Localita
FROM
   Clienti
WHERE
   Tipo IN (&#039;1,4&#039;)
</pre>
<p>restituendoci un errore perché Tipo è una colonna numerica che non può essere raffrontata con un valore stringa.</p>
<h4>Emulare un array</h4>
<p>Certo, se SQL supportasse gli <em>array</em>, tutto sarebbe più semplice: basterebbe passare un array con i valori da usare nella IN e il gioco sarebbe fatto.</p>
<p>Per emulare il funzionamento di un array possiamo usare una variabile di tipo <em>table</em>: se la prepariamo con una sola colonna avremo emulato un array (monodimensionale).<br />
Però non possiamo usare una variabile table con l&#8217;operatore IN: dobbiamo per forza modificare la nostra SP usando una JOIN.</p>
<p>Il ragionamento diventa quindi il seguente:</p>
<ul>
<li>prepariamo una lista di valori da passare alla SP</li>
<li>i valori saranno separati da un carattere predefinito (in questo esempio useremo una virgola)</li>
<li>passiamo la lista di valori separati da virgola alla SP, in un&#8217;unica variabile</li>
<li>la SP elabora la variabile stringa e la trasforma in una variabile table, inserendo ogni valore in una riga</li>
<li>infine mette in JOIN la tabella da selezionare con la variabile table ottenuta prima ed esegue la query</li>
</ul>
<h4>Trasformazione della lista in una table</h4>
<p>La prima cosa che dovremo fare sarà quindi di trasformare la nostra lista in una variable table. Per fare questo prepareremo una funzione, così da poterla riusare tutte le volte che vogliamo.</p>
<pre class="brush: sql">
USE [master]
GO

SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO

--The following is a general purpose UDF to split comma separated lists into individual items.
--Consider an additional input parameter for the delimiter, so that you can use any delimiter you like.

-- edc 01.SEP.05
-- adattamento da http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
-- 

-- edc 20.sep.06
-- adattato per le stringhe

CREATE FUNCTION [dbo].[udf_CodeSplitter]
(
	@CodeList varchar(MAX)
)
RETURNS
@ParsedList table
(
	OneCode varchar(10) -- adjust the single element length to fit your needs
)
AS
BEGIN
	DECLARE @Pos int, @OneCode varchar(10) -- adjust the single element length to fit your needs

	SET @CodeList = LTRIM(RTRIM(@CodeList))+ &#039;,&#039;
	SET @Pos = CHARINDEX(&#039;,&#039;, @CodeList, 1)

	IF REPLACE(@CodeList, &#039;,&#039;, &#039;&#039;) &lt;&gt; &#039;&#039;
	BEGIN
		WHILE @Pos &gt; 0
		BEGIN
			SET @OneCode = LTRIM(RTRIM(LEFT(@CodeList, @Pos - 1)))
			IF @OneCode &lt;&gt; &#039;&#039;
			BEGIN
				INSERT INTO @ParsedList (OneCode) VALUES (@OneCode)
			END
			SET @CodeList = RIGHT(@CodeList, LEN(@CodeList) - @Pos)
			SET @Pos = CHARINDEX(&#039;,&#039;, @CodeList, 1)

		END
	END
	RETURN
END
</pre>
<p>La funzione non fa altro che selezionare i vari elementi ed inserirli in una variabile table; la tabella restituita è formata da una sola colonna (OneCode), e potrà essere messa facilmente in JOIN con la tabella da ricercare.</p>
<p>Per testare il corretto funzionamento della funzione, e per avere un&#8217;idea del risultato, basterà eseguire questa query:</p>
<pre class="brush: sql">
SELECT * FROM master.dbo.udf_CodeSplitter(&#039;MI,CO&#039;)
</pre>
<h4>La Stored Procedure finale</h4>
<p>Andremo quindi a sistemare la nostra SP così:</p>
<pre class="brush: sql">
Create Procedure usp_Cerca_Clienti (@pLista AS VARCHAR(MAX))
AS
BEGIN

   SELECT
      Denominazione, Indirizzo, Localita
   FROM
      Clienti INNER JOIN master.dbo.udf_CodeSplitter(@pLista) TJ
      ON Clienti.Provincia=TJ.OneCode

END
</pre>
<p>mettiamo cioè in JOIN la tabella Clienti con la tabella riportata dalla funzione udf_CodeSplitter, usando come campo di corrispondenza il campo della tabella Cliente dove vogliamo operare la selezione (Clienti.Provincia) e l&#8217;unico campo riportato dalla funzione (TJ.OneCode, dove <em>TJ</em> è l&#8217;alias della tabella restituita dalla funzione).</p>
<p>L&#8217;uso diventa quindi semplicissimo:</p>
<pre class="brush: sql">
exec usp_Cerca_Clienti @pLista=&#039;MI,CO&#039;
</pre>
<h4>Gestione delle liste numeriche</h4>
<p>Il ragionamento da fare per poter utilizzare delle liste numeriche resta fondamentalmente lo stesso, ma bisogna operare qualche piccola variazione per poter gestire numeri, appunto, anziché stringhe.</p>
<p>Prepareremo quindi una nuova ulteriore funzione:</p>
<pre class="brush: sql">
USE [master]
GO
/****** Object:  UserDefinedFunction [dbo].[IDSplitter]    Script Date: 02/12/2010 12:26:50 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO

--The following is a general purpose UDF to split comma separated lists into individual items.
--Consider an additional input parameter for the delimiter, so that you can use any delimiter you like.

-- edc 01.SEP.05
-- adattamento da http://vyaskn.tripod.com/passing_arrays_to_stored_procedures.htm
-- 

ALTER FUNCTION [dbo].[udf_IDSplitter]
(
	@IDList varchar(MAX)
)
RETURNS
@ParsedList table
(
	OneID int
)
AS
BEGIN
	DECLARE @OneID varchar(10), @Pos int

	SET @IDList = LTRIM(RTRIM(@IDList))+ &#039;,&#039;
	SET @Pos = CHARINDEX(&#039;,&#039;, @IDList, 1)

	IF REPLACE(@IDList, &#039;,&#039;, &#039;&#039;) &lt;&gt; &#039;&#039;
	BEGIN
		WHILE @Pos &gt; 0
		BEGIN
			SET @OneID = LTRIM(RTRIM(LEFT(@IDList, @Pos - 1)))
			IF @OneID &lt;&gt; &#039;&#039;
			BEGIN
				INSERT INTO @ParsedList (OneID)
				VALUES (CAST(@OneID AS int)) --Use Appropriate conversion
			END
			SET @IDList = RIGHT(@IDList, LEN(@IDList) - @Pos)
			SET @Pos = CHARINDEX(&#039;,&#039;, @IDList, 1)

		END
	END
	RETURN
END
</pre>
<p>In questo caso la tabella restituita è formata da una colonna (OneID) di tipo numerico (int).</p>
<p>Per testare il corretto funzionamento della funzione, e per avere un&#8217;idea del risultato, basterà eseguire questa query:</p>
<pre class="brush: sql">
SELECT * FROM master.dbo.udf_IdSplitter(&#039;1,2,4,6,15,22&#039;)
</pre>
<p>Ricordatevi che la lista è un valore stringa, quindi va passata tra apici singoli.</p>
<h4>La Stored Procedure finale per i valori numerici</h4>
<p>Andremo quindi a sistemare la nostra SP così:</p>
<pre class="brush: sql">
Create Procedure usp_Cerca_Clienti_Tipo (@pLista AS VARCHAR(MAX))
AS
BEGIN

   SELECT
      Denominazione, Indirizzo, Localita
   FROM
      Clienti INNER JOIN master.dbo.udf_IdSplitter(@pLista) TJ
      ON Clienti.Tipo=TJ.OneId

END
</pre>
<p>In questo caso mettiamo in JOIN la tabella Clienti con la tabella riportata dalla funzione udf_IdSplitter, usando come campo di corrispondenza il campo della tabella Cliente dove vogliamo operare la selezione (Clienti.Tipo, che è di tipo int) e l&#8217;unico campo riportato dalla funzione (TJ.OneId, dove <em>TJ</em> è l&#8217;alias della tabella restituita dalla funzione).</p>
<p>L&#8217;uso diventa quindi semplicissimo:</p>
<pre class="brush: sql">
exec usp_Cerca_Clienti_Tipo @pLista=&#039;2,7,12,14,35,36,37&#039;
</pre>
<h4>Considerazioni finali</h4>
<p>Il metodo esposto semplifica notevolmente la stesura delle query di selezione basate su liste di valori. Dato che però sfrutta una funzione e una variabile table, potrebbe risultare poco performante in presenza di liste molto corpose. In questi casi potrebbe risultare più comodo popolare direttamente una tabella temporanea e metterla in JOIN con la tabella da selezionare (magari indicizzando la tabella temporanea, cosa che non può essere fatta con le variabili table).<br />
Uso il condizionale perché le performance sono influenzate da molti fattori, per cui è consigliabile effettuare delle prove caso per caso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-uso-di-una-lista-di-valori-in-una-select-where/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL: come riparare il database di sistema &#8216;msdb&#8217; danneggiato</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-come-riparare-il-database-di-sistema-msdb-danneggiato/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-come-riparare-il-database-di-sistema-msdb-danneggiato/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 12:22:07 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[2005]]></category>
		<category><![CDATA[msdb]]></category>
		<category><![CDATA[recover]]></category>
		<category><![CDATA[repair]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[system databse]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/programmazione/sql/sql-server-2005-come-riparare-il-database-di-sistema-msdb-danneggiato/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.000142 seconds-->
<!---Displayed in 0.005536 seconds.-->
Il database di sistema &#8216;msdb&#8217; di SQL Server 2005 può danneggiarsi: ecco come ripararlo.

Tra i database di sistema di Microsoft SQL Server 2005, ve ne è uno denominato &#8216;msdb&#8217; che viene usato normalmente come supporto per le pianificazioni ed altre operazioni di manutenzione o di backup.
Può accadere che si danneggi, e che di conseguenza molte [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 8.8999999999992E-5 seconds-->
<!---Displayed in 0.005855 seconds.-->
<p>Il database di sistema &#8216;msdb&#8217; di SQL Server 2005 può danneggiarsi: ecco come ripararlo.<br />
<span id="more-906"></span><br />
Tra i database di sistema di Microsoft SQL Server 2005, ve ne è uno denominato &#8216;msdb&#8217; che viene usato normalmente come supporto per le pianificazioni ed altre operazioni di manutenzione o di backup.<br />
Può accadere che si danneggi, e che di conseguenza molte operazioni diventino impossibili.<br />
Dato che non si tratta di un normale database, non può essere oggetto di normali operazioni quali <em>attach </em>e <em>detach</em>, ma bisogna seguire una procedura diversa.</p>
<table border='0'>
<tr>
<td>
<a href="http://www.dicesare.com/wp-content/uploads/important.jpg"><img src="http://www.dicesare.com/wp-content/uploads/important.jpg" alt="important" title="important" width="45" height="45" class="aligncenter size-full wp-image-918" /></a>
</td>
<td>
<blockquote><p><strong>Importante!</strong> La procedura che descriverò di seguito rigenererà il database di sistema &#8216;msdb&#8217; come appena installato, quindi tutto il suo contenuto andrà perso. Vi raccomando inoltre di effettuare il backup di tutti i dati di tutti i database dell&#8217;istanza. La procedura è riservata ad utenti esperti, e non mi assumo nessuna responsabilità; eventualmente provatelo prima su un database di test.</p></blockquote>
</td>
</tr>
</table>
<h4>1. Spegnere SQL Server</h4>
<p>Innanzitutto dovrete spegnere il servizio di SQL Server. Esistono diversi metodi; uno dei più veloci è di aprire SQL Server Management Console ed eseguire il seguente comando:</p>
<pre class="brush: sql">
SHUTDOWN
</pre>
<p>Attendete il completamento del comando ed uscite dalla console.</p>
<h4>2. Lanciare SQL Server in modalità master</h4>
<p>Per poter eseguire i comandi successivi (specificatamente per poter fare un <em>detach </em>del database &#8216;msdb&#8217;), dovrete lanciare SQL Server col trace flag 3608.<br />
Dovrete portarvi nella cartella dei programmi di SQL Server (&#8216;C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Binn&#8217; per le installazioni in italiano o &#8216;C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Binn&#8217; per le installazioni in inglese) e lanciare il seguente comando:</p>
<pre class="brush: sql">
sqlservr.exe -c -T3608 -s &lt;NOMEISTANZA&gt;
</pre>
<p>Il comando non restituisce subito il prompt di DOS (C:>), che verrà restuituito quando SQL Server verrà nuovamente spento.</p>
<h4>3. Detach-are il database di sistema &#8216;msdb&#8217;</h4>
<p>Per detach-are il database di sistema &#8216;msdb&#8217; dovrete riaprire SQL Server Management Console, che potrebbe mostrare alcuni messaggi di avvertimento, visto che ci si trova in una modalità master.<br />
La console comunque è pronta per accettare comandi; lanciate il seguente:</p>
<pre class="brush: sql">
sp_detach_db &#039;msdb&#039;
</pre>
<p>Attendete il completamento del comando ed uscite dalla console.</p>
<h4>4. Rinominare i files del database &#8216;msdb&#8217;</h4>
<p>Ora che il database &#8216;msdb&#8217; è disconnesso, potete rinominare i files che lo costituiscono (.mdf e .ldf), che si trovano in &#8216;C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Data&#8217; per le installazioni in italiano o in &#8216;C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data&#8217; per le installazioni in inglese.</p>
<h4>5. Lanciare lo script di ricostruzione</h4>
<p>Lo script di rigenerazione si trova nella cartella di installazione di SQL Server (&#8216;C:\Programmi\Microsoft SQL Server\MSSQL.1\MSSQL\Install&#8217; per le installazioni in italiano o &#8216;C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Install&#8217; per le installazioni in inglese); dopo che vi sarete portati nella cartella, lanciate il seguente comando:</p>
<pre class="brush: sql">
osql -E -S &lt;NOMESERVER&gt;\&lt;NOMEISTANZA&gt; -i instmsdb.sql
</pre>
<p>e attendete il termine delle operazioni.</p>
<h4>6. Operazioni finali</h4>
<p>La procedura è terminata. Spegnete e riaccendete normalmente SQL Server, e reinserite, se del caso, le informazioni memorizzate nel database di sistema &#8216;msdb&#8217;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-come-riparare-il-database-di-sistema-msdb-danneggiato/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Outlook: condivisione dati con WorkgroupShare</title>
		<link>http://www.dicesare.com/varie/outlook-condivisione-dati-con-workgroupshare/</link>
		<comments>http://www.dicesare.com/varie/outlook-condivisione-dati-con-workgroupshare/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 18:54:16 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[blugeco]]></category>
		<category><![CDATA[condivisione dati]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[outlook]]></category>
		<category><![CDATA[posta elettronica]]></category>
		<category><![CDATA[sincronizzazione]]></category>
		<category><![CDATA[workgroupshare]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/varie/condividere-outlook-con-workgroupshare/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.000116 seconds-->
<!---Displayed in 0.010483 seconds.-->
Per un uso efficace di Outlook in rete: condividere i dati con i vostri colleghi con WorkgroupShare.

Outlook per molti è sinonimo di posta elettronica, ma potete usarlo per molte altre cose: contatti, attività, calendario e note; se iniziate ad adoperarlo sul serio, finirà che conterrà moltissimi dati; se poi non lavorate da soli, avrete necessità [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00010200000000002 seconds-->
<!---Displayed in 0.005535 seconds.-->
<p>Per un uso efficace di Outlook in rete: condividere i dati con i vostri colleghi con WorkgroupShare.<br />
<span id="more-901"></span></p>
<p>Outlook per molti è sinonimo di posta elettronica, ma potete usarlo per molte altre cose: contatti, attività, calendario e note; se iniziate ad adoperarlo sul serio, finirà che conterrà moltissimi dati; se poi non lavorate da soli, avrete necessità di condividere questi dati con i vostri colleghi, o di costituire degli archivi comuni a cui tutti possono attingere.</p>
<p>Pensate ad esempio ad un unico archivio di indirizzi, o alla possibilità di vedere in tempo reale se un vostro collega è libero in una certa data per fissare un appuntamento comune. Normalmente la soluzione è l&#8217;installazione di Exchange Server, che però ha un costo elevato, necessita di un server e di installazione e manutenzione da parte di tecnici qualificati; scelta senz&#8217;altro giusta in ambienti complessi, ma per piccole realtà la spesa normalmente risulta eccessiva.</p>
<p>Nel nostro ufficio abbiamo scelto <a href="http://workgroupshare.blugeco.com">Workgroupshare</a>, con cui condividiamo i nostri archivi.</p>
<p>Ovviamente il programma permette di scegliere quali cartelle condividere, in modo tale da poter comunque avere delle cartelle private.<br />
In più (e forse è la cosa più interessante) si possono creare delle cartelle &#8216;pubbliche&#8217;, che risiedono sul server, a cui tutti gli utenti abilitati potranno accedere sia in lettura che in scrittura; si possono ovviamente gestire tutti i diritti, per cui si potrà decidere chi può scrivere, chi può solo leggere, ecc.</p>
<p>Il programma è smolto semplice da configurare, e non necessita di un server; quindi potete utilizzarlo anche se avete solo due o tre pc collegati in rete.<br />
E se usate dei portatili, nessun problema: quando vi staccate dalla rete i dati comuni restano sul vostro portatile e potrete consultarli e variarli anche mentre siete via; quando poi vi riconnetterete alla rete, partirà la sincronizzazione per aggiornare i dati, da e verso l&#8217;archivio principale.</p>
<p>E se avete un BlackBerry? In un prossimo articolo vi spiegherò come fare per sincronizzare Outlook / WorkgroupShare / BlackBerry.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/varie/outlook-condivisione-dati-con-workgroupshare/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come modificare o azzerare l’aliquota del contributo integrativo C.P.A. (Cassa Previdenza Avvocati)</title>
		<link>http://www.dicesare.com/applicativi/elite/come-modificare-o-azzerare-l-aliquota-del-contributo-integrativo-cpa-cassa-previdenza-avvocati-elite/</link>
		<comments>http://www.dicesare.com/applicativi/elite/come-modificare-o-azzerare-l-aliquota-del-contributo-integrativo-cpa-cassa-previdenza-avvocati-elite/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 09:33:36 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Élite]]></category>
		<category><![CDATA[aliquota contributo integrativo]]></category>
		<category><![CDATA[avvocati]]></category>
		<category><![CDATA[avvocato]]></category>
		<category><![CDATA[blugeco]]></category>
		<category><![CDATA[cassa previdenza]]></category>
		<category><![CDATA[cassa previdenza avvocati]]></category>
		<category><![CDATA[cpa]]></category>
		<category><![CDATA[parcella]]></category>
		<category><![CDATA[software studi legali]]></category>
		<category><![CDATA[studio legale]]></category>
		<category><![CDATA[studio legale associato]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/applicativi/elite/come-modificare-o-azzerare-l%e2%80%99aliquota-del-contributo-integrativoa-c-p-a-cassa-previdenza-avvocati/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.000139 seconds-->
<!---Displayed in 0.007035 seconds.-->
Élite vi permette di cambiare secondo necessità l&#8217;aliquota usata per il calcolo del contributo integrativo C.P.A. nel riepilogo finale della stampa parcella. Potrete cambiarla in modo temporaneo (per esempio se state predisponendo una parcella per un cliente con cui avete stipulato una convenzione) o in maniera definitiva, per un&#8217;eventuale variazione di legge.

Come modificare l&#8217;aliquota del [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 9.6000000000013E-5 seconds-->
<!---Displayed in 0.010761 seconds.-->
<p>Élite vi permette di cambiare secondo necessità l&#8217;aliquota usata per il calcolo del contributo integrativo C.P.A. nel riepilogo finale della stampa parcella. Potrete cambiarla in modo temporaneo (per esempio se state predisponendo una parcella per un cliente con cui avete stipulato una convenzione) o in maniera definitiva, per un&#8217;eventuale variazione di legge.</p>
<p><span id="more-853"></span><br />
<strong>Come modificare l&#8217;aliquota del contributo integrativo C.P.A. in modo temporaneo</strong></p>
<hr />In fase di stampa parcella, dopo aver inserito i parametri di stampa, accedete al tab (o linguetta) denominato &#8220;Opzioni di stampa&#8221;; nella sezione &#8220;Opzioni Fiscali&#8221; troverete una casella dove è già indicata l&#8217;aliquota di default; l&#8217;immagine che segue illustra il pannello di stampa relativo:</p>
<div id="attachment_496" class="wp-caption alignnone" style="width: 310px"><a href="http://www.dicesare.com/wp-content/uploads/2008/12/elitestampaparcellaopzionidistampa.jpg" target="_blank"><img class="size-medium wp-image-496 " title="Elite - Stampa parcella - Opzioni di stampa" src="http://www.dicesare.com/wp-content/uploads/2008/12/elitestampaparcellaopzionidistampa-300x223.jpg" alt="Opzioni di stampa - Parcella" width="300" height="223" /></a><p class="wp-caption-text">Opzioni di stampa - Parcella</p></div>
<p>Il valore dell&#8217;aliquota del contributo integrativo C.P.A. potrà essere cambiato a piacimento. Inserite 0 o lasciate la casella vuota per NON applicare il contributo integrativo C.P.A.; se invece volete inserire un&#8217;aliquota decimale, ricordatevi di usare il punto e non la virgola come separatore decimale, come ad esempio</p>
<blockquote><p>2.75</p></blockquote>
<p>Ricordatevi che il cambiamento è temporaneo, per cui la prossima stampa di parcella ripresenterà l&#8217;aliquota di default.</p>
<p><strong>Come modificare l&#8217;aliquota del contributo integrativo C.P.A. in modo permanente</strong></p>
<hr />Il valore da modificare è contenuto nel file di parametri Elite.ini, e pertanto dovrete seguire la procedura illustrata nell&#8217;articolo <a href="http://www.dicesare.com/applicativi/elite/il-file-di-parametri-elite-ini/" title="Il file di parametri Elite.ini">Il file di parametri Elite.ini</a> per modificarlo.</p>
<p>Una volta aperto il file, localizzate la sezione [PARAMETRI PARCELLA], e scorretela sino a trovare una riga così:</p>
<blockquote><p>Al.CPA=2</p></blockquote>
<p>Il valore può essere variato a piacimento; se volete inserire un&#8217;aliquota decimale, ricordatevi di usare il punto e non la virgola come separatore decimale, come ad esempio</p>
<blockquote><p>Al.CPA=2.75</p></blockquote>
<p>Se volete anche variare la dicitura in parcella, ricordatevi di modificare il parametro relativo, e cioè<br />
<blockquote>DICITURA13=&#8230;testo personalizzato&#8230;</p></blockquote>
<p>Una volta terminate le modifiche, salvate il file come descritto nell&#8217;apposito articolo e rientrate in Élite.</p>
<hr />
<table border="0">
<tbody>
<tr>
<td><a href="http://elite.blugeco.com"><img class="alignnone size-medium wp-image-89" title="eli40logo1" src="http://lnx.dicesare.com/wp-content/uploads/2008/09/eli40logo1.gif" alt="" width="109" height="41" /></a></td>
<td>
<h5>Élite è la procedura ideale per la gestione dello studio legale. Informazioni, prezzi e dimostrativo sul sito <a href="http://elite.blugeco.com" target="_blank">Blugeco</a>.</h5>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/applicativi/elite/come-modificare-o-azzerare-l-aliquota-del-contributo-integrativo-cpa-cassa-previdenza-avvocati-elite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Da Eudora ad Outlook: odissea di una migrazione &#8211; i vantaggi</title>
		<link>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-i-vantaggi/</link>
		<comments>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-i-vantaggi/#comments</comments>
		<pubDate>Sun, 27 Dec 2009 10:39:38 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[blugeco]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[eudora]]></category>
		<category><![CDATA[migrazione]]></category>
		<category><![CDATA[outlook]]></category>
		<category><![CDATA[palmare]]></category>
		<category><![CDATA[posta elettronica]]></category>
		<category><![CDATA[pst]]></category>
		<category><![CDATA[sincronizzazione]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-i-vantaggi/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.000136 seconds-->
<!---Displayed in 0.005734 seconds.-->
Dopo la migrazione da Eudora ad Outlook: ci sono anche dei vantaggi!

Come già raccontato nell&#8217;articolo Da Eudora ad Outlook: odissea di una migrazione &#8211; le premesse, sono passato da Eudora ad Outlook; nell&#8217;articolo successivo Da Eudora ad Outlook: odissea di una migrazione &#8211; le difficoltà ho esposto le difficoltà incontrate. In quest&#8217;articolo, elencherò i vantaggi [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.000107 seconds-->
<!---Displayed in 0.008633 seconds.-->
<p>Dopo la migrazione da Eudora ad Outlook: ci sono anche dei vantaggi!<br />
<span id="more-840"></span></p>
<p>Come già raccontato nell&#8217;articolo <a href="http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-premesse/" title="Da Eudora ad Outlook: odissea di una migrazione &#8211; le premesse">Da Eudora ad Outlook: odissea di una migrazione &#8211; le premesse</a>, sono passato da Eudora ad Outlook; nell&#8217;articolo successivo <a href="http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-difficolta/" title="Da Eudora ad Outlook: odissea di una migrazione &#8211; le difficoltà">Da Eudora ad Outlook: odissea di una migrazione &#8211; le difficoltà</a> ho esposto le difficoltà incontrate. In quest&#8217;articolo, elencherò i vantaggi riscontrati.</p>
<h2>PST (Personal Folder Storage) multipli</h2>
<p>Outlook, come la maggior parte dei client di posta elettronica, memorizza tutti i messaggi, gli allegati, gli indirizzi ecc. in un unico file (PST); questo rappresenta una comodità, dal punto di vista del file system, e, se opportunamente progettato, un unico file è più facile da gestire di una serie di cartelle con &#8216;n&#8217; files dentro (come fa Eudora). Sfortunatamente però, dal mio personale punto di vista, Outlook disattende molte di queste premesse, risultando, rispetto ad altri client che usano la stessa metodologia, molto lento nella gestione delle informazioni, soprattutto in presenza di PST corposi; inoltre, almeno fino alla versione 2002, i PST di Outlook tendono un po&#8217; troppo facilmente a corrompersi.</p>
<p>Preso atto di ciò, ho cercato di trarne comunque vantaggio, spezzando il mio archivio di email (più di 10 anni di corrispondenza elettronica) in diversi PST; ad esempio, un PST di lavoro, uno personale, uno per i progetti chiusi e archiviati, ecc. In questo modo ho potuto innanzitutto razionalizzare gli archivi dal punto di vista del contenuto; inoltre:</p>
<ul>
<li><strong>i PST possono essere messi ognuno in una cartella o drive diverso</strong>: quindi quello di lavoro può essere messo su un drive di rete, quello personale su una chiavetta USB, ecc. </li>
<li><strong>i PST possono essere attivati e disattivati a piacimento</strong>: molto comodo per i file di archivio, che normalmente non sono attivi e quindi non danno &#8216;fastidio&#8217;, ma che possono essere riagganciati alla bisogna;</li>
</ul>
<h2>Pluralità di informazioni gestite</h2>
<p>Outlook non è solo un client di posta elettronica, ma permette anche di gestire indirizzi, appuntamenti, note, to-do list&#8230; quindi quello che avevo sparso in giro in mille programmini inizia ad avere una casa comune. In questo caso si apprezza non tanto la bontà delle singole funzioni (di certo in giro ci sono molti programmi che gestiscono meglio chi l&#8217;agenda, chi la rubrica, ecc.), quanto il fatto che siano tutte in un unico contenitore e che siano tra di loro intercorrelate.</p>
<h2>Sincronizzazione col palmare</h2>
<p>Direi che al giorno d&#8217;oggi è indispensabile; e, come al punto precedente, avere un unico punto di sincronizzazione (invece dei tanti di prima) costituisce senz&#8217;altro un vantaggio.</p>
<h2>Disponibilità di add-on (o plug-in)</h2>
<p>Data la diffusione di Outlook, sono presenti sul mercato molti strumenti aggiuntivi (add-on o plug-in) anche se non numerosi come per altri client; uno di questi, in particolare, mi permette di condividere e sincronizzare i dati che mi interessano con i miei colleghi; il prodotto si chiama <a href="http://workgroupshare.blugeco.com">Workgroupshare</a>, e ne parlerò in uno dei prossimi articoli.</p>
<p>continua&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-i-vantaggi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BBLex &#8211; Élite (e non solo!) sul vostro BlackBerry</title>
		<link>http://www.dicesare.com/applicativi/elite/bblex-elite-software-studi-legali-sul-vostro-blackberry/</link>
		<comments>http://www.dicesare.com/applicativi/elite/bblex-elite-software-studi-legali-sul-vostro-blackberry/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 10:45:05 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Élite]]></category>
		<category><![CDATA[avvocati]]></category>
		<category><![CDATA[avvocato]]></category>
		<category><![CDATA[bblex]]></category>
		<category><![CDATA[blackberry]]></category>
		<category><![CDATA[blugeco]]></category>
		<category><![CDATA[mobilita]]></category>
		<category><![CDATA[palmare]]></category>
		<category><![CDATA[rim]]></category>
		<category><![CDATA[smartphone]]></category>
		<category><![CDATA[softec]]></category>
		<category><![CDATA[software studi legali]]></category>
		<category><![CDATA[studio legale]]></category>
		<category><![CDATA[studio legale associato]]></category>
		<category><![CDATA[telefonino]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/applicativi/elite/bblex-elite-e-non-solo-sul-proprio-blackberry/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00010599999999999 seconds-->
<!---Displayed in 0.011296 seconds.-->
Siete sempre in movimento, fuori ufficio, e non volete (o non potete!) rinunciare ai dati sul vostro server? Qui la soluzione!
BBLex &#8211; Élite (e non solo!) sul vostro BlackBerry

Il 26 ottobre 2009 Blugeco (www.blugeco.com), in partnership con RIM (Research In Motion) e Softec, ha presentato durante un convegno dell’AGAM (Associazione Giovani Avvocati Milano) tenutosi a [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00021899999999997 seconds-->
<!---Displayed in 0.005266 seconds.-->
<p>Siete sempre in movimento, fuori ufficio, e non volete (o non potete!) rinunciare ai dati sul vostro server? Qui la soluzione!<span id="more-827"></span><strong></strong></p>
<p><strong>BBLex &#8211; Élite (e non solo!) sul vostro BlackBerry</strong></p>
<hr />
<p>Il 26 ottobre 2009 Blugeco (www.blugeco.com), in partnership con RIM (Research In Motion) e Softec, ha presentato durante un convegno dell’AGAM (Associazione Giovani Avvocati Milano) tenutosi a Milano, la nuova soluzione destinata agli Studi Legali per la mobilità.</p>
<p>BBLex è una soluzione che installata sul proprio BlackBerry consente a tutti gli Avvocati di collegarsi con il proprio programma di gestione dello Studio, consultando e aggiornando sia le pratiche che molti altri dati, ovunque essi si trovino.</p>
<p align="center><a href="http://www.dicesare.com/wp-content/uploads/bblex.jpg" align="center"><img src="http://www.dicesare.com/wp-content/uploads/bblex.jpg" alt="BBLex" title="bblex" width="367" height="174" class="size-full wp-image-828" /></a></p>
<p></p>
<h3>BBLex®: Élite sul vostro BlackBerry.</h3>
<p>BBLex nasce dall’esigenza specifica di fornire agli Avvocati un accesso alle proprie informazioni di Studio anche mentre sono in movimento.<br />
Grazie ad un rapporto di partnership con RIM, la società che produce i famosi BlackBerry, siamo oggi in grado di soddisfare questa necessità, trasmettendo alcune informazioni di Élite direttamente sul terminale BlackBerry, con la possibilità di interagire con l&#8217;applicativo.<br />
BBLex si basa sulla piattaforma tecnologica DesktopMate di Softec, che consente una configurazione personalizzata dei servizi disponibili.</p>
<p>In particolare sarà possibile, in un primo momento, consultare direttamente dal proprio BlackBerry le seguenti informazioni di Élite:</p>
<ul>
<li>Scadenze (Agenda)</li>
<li>Dati Anagrafici (Rubrica)</li>
<li>Dati Riepilogativi Pratiche</li>
</ul>
<p>In questo modo potrete sfruttare tutta la potenza dei terminali BlackBerry non solo per la gestione delle email, ma anche per consultare gli archivi di Élite mentre siete fuori Studio, persino laddove non potete usare un PC portatile né sfruttare una connessione internet.</p>
<p>In un secondo momento sarà possibile consultare anche altre informazioni di Élite, e più in particolare:</p>
<ul>
<li>Prestazioni (Parcelle)</li>
<li>Documenti (Testi, Fogli Elettronici, Immagini, PDF e altro)</li>
</ul>
<p></p>
<h3>BBLex: un uso semplice ed immediato</h3>
<p>Con BBLex, i dati di Élite sono sempre disponibili per la consultazione e l’aggiornamento; l’uso è sempre semplice, immediato e sicuro grazie alla sua accurata progettazione:</p>
<ul>
<li>Navigazione a menu</li>
<li>Funzioni di ricerca</li>
<li>Visualizzazione dettagli</li>
<li>Sicurezza degli accessi</li>
<li>Sicurezza dei dati</li>
</ul>
<p>Alcune funzioni avanzate, come il Click-to-call e click-to-send, per telefonare o inviare una mail partendo direttamente dalla rubrica di Élite, renderanno l’utilizzo di BBLex proficuo e conveniente.</p>
<p></p>
<h3>BBLex: funzioni aggiuntive</h3>
<p>BBLex non è soltanto Élite; infatti vi permetterà anche di consultare le News di settore (in collaborazione con portali dedicati), di condividerle con i vostro colleghi, e di archiviare le news preferite.</p>
<p>Sarà infine possibile, una volta perfezionati gli accordi con i produttori, ottenere l&#8217;accesso alle Banche Dati di Leggi, Sentenze, ecc.</p>
<p></p>
<h3>BBLex: operare in sicurezza</h3>
<p>Con BBLex potrete operare in tutta sicurezza, grazie anche alle caratteristiche intrinseche del dispositivo BlackBerry:</p>
<ul>
<li>in caso di furto o smarrimento del dispositivo, è possibile bloccare il sistema da remoto ed eliminare i dati riservati (blocco del dispositivo a distanza);</li>
<li>dopo 10 tentativi di inserimento password, il dispositivo viene resettato automaticamente;</li>
<li>impostazione/modifica password del dispositivo;</li>
<li>protezione contro applicazioni dannose;</li>
<li>Mobile Security Card (cifratura hw e firma digitale).</li>
</ul>
<p></p>
<h3>BBLex: Altri software per studio legale</h3>
<p>Per la gestione del Vostro Studio non utilizzate Élite ma un altro software? Siete comunque interessati alle funzionalità di BBLex? Contattateci e studieremo una soluzione assieme a Voi.</p>
<hr />
<table border="0">
<tbody>
<tr>
<td><a href="http://elite.blugeco.com"><img class="alignnone size-medium wp-image-89" title="eli40logo" src="http://lnx.dicesare.com/wp-content/uploads/2008/09/eli40logo1.gif" alt="" width="109" height="41" /></a></td>
<td>
<h5>Élite è la procedura ideale per la gestione dello studio legale. Informazioni, prezzi e dimostrativo sul sito <a href="http://elite.blugeco.com" target="_blank">Blugeco</a>.</h5>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/applicativi/elite/bblex-elite-software-studi-legali-sul-vostro-blackberry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aste fallimentari ::: come accedere all&#8217;elenco</title>
		<link>http://www.dicesare.com/varie/aste-fallimentari-come-accedere-all-elenco/</link>
		<comments>http://www.dicesare.com/varie/aste-fallimentari-come-accedere-all-elenco/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 15:07:29 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[asta fallimentare]]></category>
		<category><![CDATA[autoveicoli]]></category>
		<category><![CDATA[fallimento]]></category>
		<category><![CDATA[immobili]]></category>
		<category><![CDATA[tribunale]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/varie/come-accedere-all-elenco-delle-aste-fallimentari/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00010500000000002 seconds-->
<!---Displayed in 0.005855 seconds.-->
Incantonline, un servizio decennale sulle aste fallimentari.

Girando su internet in cerca di un&#8217;auto usata o di una casa per le vacanze, vi sarà certamente capitato di imbattervi in siti che parlavano di beni provenienti da fallimenti, spesso a cifre interessanti. Ma da dove provengono queste informazioni?
Il primo posto che viene in mente è senz&#8217;altro il [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00011500000000003 seconds-->
<!---Displayed in 0.006053 seconds.-->
<p>Incantonline, un servizio decennale sulle aste fallimentari.<br />
<span id="more-822"></span><br />
Girando su internet in cerca di un&#8217;auto usata o di una casa per le vacanze, vi sarà certamente capitato di imbattervi in siti che parlavano di beni provenienti da fallimenti, spesso a cifre interessanti. Ma da dove provengono queste informazioni?</p>
<p>Il primo posto che viene in mente è senz&#8217;altro il tribunale, ma sarebbe impensabile girarsi tutti i tribunali d&#8217;Italia per reperire informazioni, anche on line (ammesso che tutti i tribunali abbiano un sito dove sono elencati i beni). </p>
<p>Torna allora utilissimo il servizio lanciato da oltre 10 anni da Incantonline: si tratta in pratica di un portale che raccoglie tutte le aste fallimentari d&#8217;Italia, suddivise per tipologia e per regione. </p>
<p>Come recita il sito &#8220;Avrai l&#8217;opportunità di visionare in tempo reale tutto ciò che viene posto all&#8217;asta dai Tribunali italiani e dagli organi preposti. All&#8217;interno troverai tutti i riferimenti per partecipare con semplicità, ed in prima persona, alle aste di immobili, autoveicoli e beni di qualsiasi genere. (Oltre 12000 beni in banca dati)&#8221;</p>
<p>Il portale è organizzato in maniera semplice ed intuitiva, e le ricerche portano con celerità al risultato voluto. Il servizio è a pagamento, ma periodicamente vengono lanciate delle campagne per accedere a prezzi scontati.</p>
<p>Questo l&#8217;indirizzo per accedere al servizio: <a href="http://www.incantonline.it/archivio_aste.htm">http://www.incantonline.it/archivio_aste.htm</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/varie/aste-fallimentari-come-accedere-all-elenco/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL: come usare l&#8217;output di una Stored Procedure SQL in una nuova Query</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-come-usare-l-output-di-una-stored-procedure-sql-in-una-nuova-query/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-come-usare-l-output-di-una-stored-procedure-sql-in-una-nuova-query/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 19:01:18 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[sp]]></category>
		<category><![CDATA[stored procedure]]></category>
		<category><![CDATA[stored procedures]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/programmazione/sql/come-usare-l-output-di-una-stored-procedure-sql-in-una-nuova-query/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00010300000000002 seconds-->
<!---Displayed in 0.005483 seconds.-->
Avete una Stored Procedure SQL e volete usarne l&#8217;output in un&#8217;altra query (senza modificare la SP originale). Ecco come fare.

Vi sarà capitato di voler usare l&#8217;output di una Stored Procedure in un&#8217;altra query; la prima cosa che viene in mente è di modificare o duplicare la SP originale e inserire dei parametri OUTPUT, per poi [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 9.0000000000034E-5 seconds-->
<!---Displayed in 0.005536 seconds.-->
<p>Avete una Stored Procedure SQL e volete usarne l&#8217;output in un&#8217;altra query (senza modificare la SP originale). Ecco come fare.<br />
<span id="more-814"></span><br />
Vi sarà capitato di voler usare l&#8217;output di una Stored Procedure in un&#8217;altra query; la prima cosa che viene in mente è di modificare o duplicare la SP originale e inserire dei parametri OUTPUT, per poi sfruttarli.</p>
<p>Ma non sempre si <strong><em>può</em></strong>; a volte, infatti, soprattutto in ambienti complessi, certe SP non si possono toccare, perché sono usate da altre procedure o gestite da altri programmatori.</p>
<p>Cosa fare allora?</p>
<p>Supponiamo di avere una SP che mi elenca tutti i clienti di una determinata provincia</p>
<pre class="brush: sql">
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE usp_ClientiProvincia (@p_Provincia VARCHAR(2))

SET NOCOUNT ON

   SELECT CODICE, DESCRIZIONE
   FROM CLIENTI
   WHERE PROVINCIA = @p_PROVINCIA
   ORDER BY 1
</pre>
<p>una SP davvero semplice.</p>
<p>Se la facciamo girare, otteniamo due campi, CODICE e DESCRIZIONE.</p>
<p>Nella nostra nuova query dichiariamo innanzitutto una variabile TABLE che possa contenere il risultato della SP</p>
<pre class="brush: sql">
DECLARE @ClientiTable TABLE (CODICE VARCHAR(20), DESCRIZIONE VARCHAR(100))
</pre>
<p>Ovviamente la struttura della variabile varierà in base al variare dell&#8217;output della SP che volete catturare.<br />
Per memorizzare l&#8217;output della SP usiamo una comune INSERT INTO nella forma breve (INSERT INTO SELECT &#8230;), specificando anche i parameti per la SP da cattuare.</p>
<pre class="brush: sql">
INSERT INTO @ClientiTable EXEC usp_ClientiProvincia @p_PROVINCIA=&#039;MI&#039;
</pre>
<p>A questo punto ci ritroviamo nella variabile @ClientiTable l&#8217;output della SP, pronta per essere utilizzata per i nostri scopi; ad esempio:</p>
<pre class="brush: sql">
SELECT * FROM @ClientiTable WHERE DESCRIZIONE LIKE @p_cerca
</pre>
<p>Questa la query complessiva</p>
<pre class="brush: sql">
DECLARE @ClientiTable TABLE (CODICE VARCHAR(20), DESCRIZIONE VARCHAR(100))
INSERT INTO @ClientiTable EXEC usp_ClientiProvincia @p_PROVINCIA=&#039;MI&#039;
SELECT * FROM @ClientiTable WHERE DESCRIZIONE LIKE @p_cerca
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-come-usare-l-output-di-una-stored-procedure-sql-in-una-nuova-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Da Eudora ad Outlook: odissea di una migrazione &#8211; le difficoltà</title>
		<link>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-difficolta/</link>
		<comments>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-difficolta/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 18:33:51 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[eudora]]></category>
		<category><![CDATA[migrazione]]></category>
		<category><![CDATA[outlook]]></category>
		<category><![CDATA[palmare]]></category>
		<category><![CDATA[posta elettronica]]></category>
		<category><![CDATA[pst]]></category>
		<category><![CDATA[sincronizzazione]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-difficolta/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 9.300000000001E-5 seconds-->
<!---Displayed in 0.007237 seconds.-->
Dopo la migrazione da Eudora ad Outlook: ecco le difficoltà incontrate.

Come già raccontato nell&#8217;articolo Da Eudora ad Outlook: odissea di una migrazione &#8211; le premesse, sono passato da Eudora ad Outlook; ovviamente, data la diversità dei prodotti (non entro nella discussione &#8220;meglio questo, meglio quello&#8221;) e soprattutto data l&#8217;abitudine acquisita con Eudora, sono iniziate le [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 8.8000000000032E-5 seconds-->
<!---Displayed in 0.005156 seconds.-->
<p>Dopo la migrazione da Eudora ad Outlook: ecco le difficoltà incontrate.<br />
<span id="more-806"></span></p>
<p>Come già raccontato nell&#8217;articolo <a href="http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-premesse/" title="Da Eudora ad Outlook: odissea di una migrazione &#8211; le premesse">Da Eudora ad Outlook: odissea di una migrazione &#8211; le premesse</a>, sono passato da Eudora ad Outlook; ovviamente, data la diversità dei prodotti (non entro nella discussione &#8220;meglio questo, meglio quello&#8221;) e soprattutto data l&#8217;abitudine acquisita con Eudora, sono iniziate le difficoltà.</p>
<h2>I filtri per dominio</h2>
<p>In Eudora era semplice (con un apposito comando) dichiarare un filtro per spostare tutta la posta proveniente da un dominio (ad es. @blugeco.com) in una cartella, senza dover specificare mittente per mittente; in Outlook invece a prima vista pare non si possa fare, almeno non con un comando specifico.<br />
Bisogna infatti iniziare ad impostare la regola, poi cercare la voce &#8220;Con parole specifiche nell&#8217;indirizzo del mittente&#8221;, selezionarla e quindi inserire il dominio. </p>
<p>Ok, non proprio intuitivo, ma è <em>possibile</em>.</p>
<h2>La posta non letta</h2>
<p>Inseriti i filtri, mi accorgo di un comportamento strano (non voglio chiamarlo <em>difetto</em>) di Outlook: quando una cartella contiene un messaggio non letto, il nome della cartella viene evidenziato in grassetto (bene); ma se un messaggio mail &#8211; per effetto dei filtri &#8211; finisce in una sottocartella, la cartella o le cartelle superiori NON vengono anch&#8217;esse evidenziate (come accadeva in Eudora), per cui non si vede <em>al volo</em> quale sono le caselle con nuovi messaggi.</p>
<p>Al solito, il trucco si trova; eccolo:<br />
bisogna aprire cartella di sistema &#8220;Cartelle ricerche&#8221; e cercare la cartella &#8220;Messaggi non letti&#8221; (o &#8220;Unread mail&#8221;); a questo punto, per tenerla bene in evidenza, va spostata in &#8220;Cartelle preferite&#8221;. </p>
<p>Non proprio intuitivo, non proprio efficace, ma <em>funziona</em>.</p>
<p>continua&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-difficolta/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Da Eudora ad Outlook: odissea di una migrazione &#8211; le premesse</title>
		<link>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-premesse/</link>
		<comments>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-premesse/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 17:04:35 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Varie]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[eudora]]></category>
		<category><![CDATA[migrazione]]></category>
		<category><![CDATA[outlook]]></category>
		<category><![CDATA[posta elettronica]]></category>
		<category><![CDATA[pst]]></category>
		<category><![CDATA[sincronizzazione]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/?p=797</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 8.7000000000004E-5 seconds-->
<!---Displayed in 0.004992 seconds.-->
Migrare da Eudora ad Outlook: ecco le motivazioni della scelta.

Sono di recente dovuto passare da Eudora ad Outlook: una scelta non facile, ma obbigata. Ecco perché.
Ho usato Eudora (uno dei più antichi client di posta elettronica) per una quindicina d&#8217;anni, sin dalla release 3.x.
Ovviamente avevo preso le mie abitudini, e non avevo nessuna intenzione di [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00010599999999999 seconds-->
<!---Displayed in 0.004976 seconds.-->
<p>Migrare da Eudora ad Outlook: ecco le motivazioni della scelta.<br />
<span id="more-797"></span></p>
<p>Sono di recente dovuto passare da Eudora ad Outlook: una scelta non facile, ma obbigata. Ecco perché.</p>
<p>Ho usato <a href="http://www.eudora.com">Eudora</a> (uno dei più antichi client di posta elettronica) per una quindicina d&#8217;anni, sin dalla release 3.x.<br />
Ovviamente avevo preso le mie abitudini, e non avevo nessuna intenzione di cambiare, anche se la </a><a href="http://www.qualcomm.com">Qualcomm</a> aveva già da tempo smesso di sviluppare il prodotto.</p>
<p>Da un po&#8217; di tempo però una delle manchevolezze di Eudora, e cioè il fatto che non supporti i caratteri Unicode (quelli per le lettere accentate, per intenderci), iniziava a diventare fastidiosa, dato che i messaggi che mi arrivano sono in gran parte fatti così.</p>
<p>Inoltre, il fatto di non conoscere bene Outlook mi impediva di offrire ai miei clienti un aiuto quando avevano problemi col prodotto.</p>
<p>Decido quindi di passare ad Outlook (non altri client, per il motivo appena detto, del supporto ai clienti).</p>
<p>Mi scontro subito con il primo, enorme problema: gli allegati. Sì, perché Eudora ha un modo tutto suo di gestire gli allegati: essi sono memorizzati come file singoli, staccati dal messaggio, in una cartella predefinita (può sembrar scomodo, ma per alcune esigenze è conveniente); e per via di questo suo modo strano, l&#8217;importatore di Outlook importa tutto da Eudora, <strong>tranne</strong> gli allegati. Anche passando per Outlook Express (come consigliato da Microsoft per preservare alcune informazioni di Eudora) gli allegati non vengono migrati.</p>
<p>Parto quindi alla ricerca di un software che permetta di migrare gli allegati; per fortuna esiste: si chiama <a href="http://www.aid4mail.com/overview.php">Aid4Mail</a>.</p>
<p>continua&#8230; <a href="http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-difficolta/" title="Da Eudora ad Outlook: odissea di una migrazione &#8211; le difficoltà">Da Eudora ad Outlook: odissea di una migrazione &#8211; le difficoltà</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/varie/da-eudora-ad-outlook-odissea-di-una-migrazione-le-premesse/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>SQL: come controllare l&#8217;esistenza di un file</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-come-controllare-l-esistenza-di-un-file/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-come-controllare-l-esistenza-di-un-file/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 17:28:11 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[exec]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[sp]]></category>
		<category><![CDATA[stored procedure]]></category>
		<category><![CDATA[stored procedures]]></category>
		<category><![CDATA[xp_fileexist]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/?p=786</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00010199999999999 seconds-->
<!---Displayed in 0.007781 seconds.-->
SQL Server offre la possibilità di controllare se un file esiste. Vediamo come.

Tramite una procedura interna di SQL è possibile controllare l&#8217;esistenza di un file. La procedura è xp_fileexist e va usata così

EXEC master..xp_fileexist &#039;C:\immagine.jpg&#039;

viene riportato 1 se il file esiste, oppure 0 se non esiste.
In un caso pratico ho dovuto controllare l&#8217;esistenza di un [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00012699999999999 seconds-->
<!---Displayed in 0.006889 seconds.-->
<p>SQL Server offre la possibilità di controllare se un file esiste. Vediamo come.<br />
<span id="more-786"></span></p>
<p>Tramite una procedura interna di SQL è possibile controllare l&#8217;esistenza di un file. La procedura è <strong>xp_fileexist</strong> e va usata così</p>
<pre class="brush: sql">
EXEC master..xp_fileexist &#039;C:\immagine.jpg&#039;
</pre>
<p>viene riportato <strong>1</strong> se il file esiste, oppure <strong>0</strong> se non esiste.</p>
<p>In un caso pratico ho dovuto controllare l&#8217;esistenza di un certo numero di files, il cui nome era memorizzato in una tabella. Per fare questo, ho innanzitutto creato una funzione (udf) che effettuasse il controllo e ritornasse il flag di trovato/non trovato</p>
<pre class="brush: sql">
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		&lt;EDC&gt;
-- Create date: &lt;05.sep.2009&gt;
-- Description:	&lt;Check file exist&gt;
-- =============================================
ALTER FUNCTION udf_FileExist
(
	@in_FileName VARCHAR(512)
)
RETURNS INT
AS
BEGIN

	DECLARE @out_result INT

	EXEC master..xp_fileexist @in_FileName, @out_result OUT

	RETURN ISNULL(@out_result,0)

END
GO
</pre>
<p>La funzione <strong>udf_FileExist</strong> accetta in input il nome del file (percorso completo) e restituisce un intero che varrà <strong>1</strong> se il file esiste, oppure <strong>0</strong> se non esiste.</p>
<p>Per usarla, sarà sufficiente richiamare la funzione nella query, così:</p>
<pre class="brush: sql">
SELECT NomeFile, dbo.udf_FileExist(NomeFile) AS Esiste FROM Tabella_Files
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-come-controllare-l-esistenza-di-un-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Artisteer ::: Templates per siti web, WordPress, Joomla, Drupal</title>
		<link>http://www.dicesare.com/utilita/artisteer-templates-per-siti-web-wordpress-joomla-drupal/</link>
		<comments>http://www.dicesare.com/utilita/artisteer-templates-per-siti-web-wordpress-joomla-drupal/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 10:20:30 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Utilità]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[sito]]></category>
		<category><![CDATA[sito web]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[web site]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/utilita/artisteer-templates-per-siti-web-wordpress-joomla-drupal/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00014700000000001 seconds-->
<!---Displayed in 0.011096 seconds.-->
Volete personalizzare il vostro sito o il vostro blog fatto in Wordpress, Joomla o Drupal? Artisteer è il generatore di templates che fa per voi.
Se avete un vostro sito web o un blog, fatto in HTML classico, oppure usando uno strumento come Wordpress, Joomla o Drupal, probabilmente vi sarete scontrati con la difficoltà di inventare [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00011300000000003 seconds-->
<!---Displayed in 0.00581 seconds.-->
<p>Volete personalizzare il vostro sito o il vostro blog fatto in Wordpress, Joomla o Drupal? Artisteer è il generatore di templates che fa per voi.<br />
<span id="more-779"></span>Se avete un vostro sito web o un blog, fatto in HTML classico, oppure usando uno strumento come Wordpress, Joomla o Drupal, probabilmente vi sarete scontrati con la difficoltà di inventare un tema o di personalizzare quelli forniti di default. Se volete un tema fortemente personalizzato, potete usare Artisteer, un generatore di templates semplice e potente.</p>
<p>Buon lavoro.</p>
<p align="center">
<a target='new' href="http://click.linksynergy.com/fs-bin/click?id=b0AJx8T98gQ&#038;offerid=173675.10000039&#038;type=4&#038;subid=0"><IMG alt="Artisteer - Web Design Generator" border="0" src="http://cdn.extensoft.com/Artisteer/banners/WebDesign/WebDesign_120x90.gif"></a><IMG border="0" width="1" height="1" src="http://ad.linksynergy.com/fs-bin/show?id=b0AJx8T98gQ&#038;bids=173675.10000039&#038;type=4&#038;subid=0"><br />
<a target='new' href="http://click.linksynergy.com/fs-bin/click?id=b0AJx8T98gQ&#038;offerid=173675.10000005&#038;type=4&#038;subid=0"><IMG alt="Artisteer - Wordpress Theme Generator" border="0" src="http://cdn.extensoft.com/Artisteer/banners/WP/wp_120x90.gif"></a><IMG border="0" width="1" height="1" src="http://ad.linksynergy.com/fs-bin/show?id=b0AJx8T98gQ&#038;bids=173675.10000005&#038;type=4&#038;subid=0"><br />
<a target='new' href="http://click.linksynergy.com/fs-bin/click?id=b0AJx8T98gQ&#038;offerid=173675.10000023&#038;type=4&#038;subid=0"><IMG alt="Artisteer - Joomla Theme Generator" border="0" src="http://cdn.extensoft.com/Artisteer/banners/Joomla/joomla_120x90.gif"></a><IMG border="0" width="1" height="1" src="http://ad.linksynergy.com/fs-bin/show?id=b0AJx8T98gQ&#038;bids=173675.10000023&#038;type=4&#038;subid=0"><br />
<a target='new' href="http://click.linksynergy.com/fs-bin/click?id=b0AJx8T98gQ&#038;offerid=173675.10000011&#038;type=4&#038;subid=0"><IMG alt="Artisteer - Drupal Theme Generator" border="0" src="http://cdn.extensoft.com/Artisteer/banners/Drupal/drupal_120x90.gif"></a><IMG border="0" width="1" height="1" src="http://ad.linksynergy.com/fs-bin/show?id=b0AJx8T98gQ&#038;bids=173675.10000011&#038;type=4&#038;subid=0"></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/utilita/artisteer-templates-per-siti-web-wordpress-joomla-drupal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL: come aggregare risultati diversi in un&#8217;unica riga di risultati</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-come-aggregare-risultati-diversi-in-una-unica-riga-di-risultati/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-come-aggregare-risultati-diversi-in-una-unica-riga-di-risultati/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 15:50:51 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[aggregate]]></category>
		<category><![CDATA[aggregazione]]></category>
		<category><![CDATA[COUNT()]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[sp]]></category>
		<category><![CDATA[stored procedure]]></category>
		<category><![CDATA[stored procedures]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/?p=772</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00011799999999995 seconds-->
<!---Displayed in 0.0078360000000001 seconds.-->
Come aggregare risultati diversi in un&#8217;unica riga (record) di risultati
Un amico ha sollevato questo problema: come conoscere con un&#8217;unica query quante foto ha inserito un dato utente nella tabella foto e quanti blog ha inserito lo stesso utente nella tabella blogs.
Dato che il database in uso era Access, non si potevano usare Stored Procedures, quindi [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 0.00010899999999991 seconds-->
<!---Displayed in 0.004369 seconds.-->
<p>Come aggregare risultati diversi in un&#8217;unica riga (record) di risultati</p>
<p><span id="more-772"></span>Un amico ha sollevato questo problema: come conoscere con un&#8217;unica query quante foto ha inserito un dato utente nella tabella foto e quanti blog ha inserito lo stesso utente nella tabella blogs.</p>
<p>Dato che il database in uso era Access, non si potevano usare Stored Procedures, quindi il tutto andava fatto con un&#8217;unica query.</p>
<p>Procediamo quindi per passi successivi.</p>
<p>1. Per prima cosa vediamo come leggere quante foto sono state inserite (il nostro utente immaginario si chiamerà&#8230;. &#8220;Pippo&#8221;, come sempre)</p>
<pre class="brush: sql">
SELECT COUNT(*) FROM gallerieFoto WHERE fAutore=&quot;Pippo&quot;
</pre>
<p>il risultato della query sarà (ad esempio):<br />
<em>5</em></p>
<p>2. Adesso procediamo con la lettura di quanti messaggi sono stati inseriti nel blog</p>
<pre class="brush: sql">
SELECT COUNT(*) FROM blogs WHERE bAutore=&quot;Pippo&quot;
</pre>
<p>il risultato della query sarà (ad esempio):<br />
<em> 3</em></p>
<p>3. Ora uniamo le due query con una UNION, visto che il formato di uscita è identico</p>
<pre class="brush: sql">
SELECT COUNT(*) FROM gallerieFoto WHERE fAutore=&quot;Pippo&quot;
UNION
SELECT COUNT(*) FROM blogs WHERE bAutore=&quot;Pippo&quot;
</pre>
<p>il risultato della query sarà:<br />
<em> 5<br />
3</em></p>
<p>4. così facendo avremmo due record, ma non si vuole fare un ciclo di lettura; quindi bisogna fare in modo che la query restituisca 2 colonne, non due righe</p>
<p>5. iniziamo con l&#8217;attribuire i due nomi di colonna per i risultati: qFoto e qBlog</p>
<pre class="brush: sql">
SELECT COUNT(*) AS qFoto FROM gallerieFoto WHERE fAutore=&quot;Pippo&quot;
UNION
SELECT COUNT(*) AS qBlog FROM blogs WHERE bAutore=&quot;Pippo&quot;
</pre>
<p>il risultato della query sarà:<br />
<em>5<br />
3</em></p>
<p>6. però è ancora una colonna sola; quindi aggiungiamo una colonna per query che faccia da segnaposto: nella query delle foto aggiungiamo il segnaposto dei blog, nella query dei blog aggiungiamo il segnaposto delle foto</p>
<pre class="brush: sql">
SELECT COUNT(*) AS qFoto, 0 AS qBlog FROM gallerieFoto WHERE fAutore=&quot;Pippo&quot;
UNION
SELECT 0 as qFoto, COUNT(*) AS qBlog FROM blogs WHERE bAutore=&quot;Pippo&quot;
</pre>
<p>da notare l&#8217;inserimento incrociato dei segnaposto, per ottenere la corrispondenza delle colonne</p>
<p>il risultato della query sarà:<br />
<em>5 0<br />
0 3</em></p>
<p>7. sistemata la questione delle due colonne, resta il problema delle due righe; aggiungiamo una query esterna che raccolga i MAX delle query (infatti interessano i risultati <em>5</em> e <em>3</em>, gli zeri vanno ignorati); potremmo usare anche SUM, io per abitudine preferisco MAX.</p>
<pre class="brush: sql">
SELECT MAX(qFoto) AS qFoto, MAX(qBlog) as qBlog FROM (
SELECT COUNT(*) AS qFoto, 0 AS qBlog FROM gallerieFoto WHERE fAutore=&quot;Pippo&quot;
UNION
SELECT 0 as qFoto, COUNT(*) AS qBlog FROM blogs WHERE bAutore=&quot;Pippo&quot;
) AS subQry
</pre>
<p>il risultato della query sarà:<br />
<em>5 3</em></p>
<p>che è esattamente quello che si voleva ottenere.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-come-aggregare-risultati-diversi-in-una-unica-riga-di-risultati/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come duplicare (clonare) una pratica</title>
		<link>http://www.dicesare.com/applicativi/elite/come-duplicare-clonare-una-pratica-elite/</link>
		<comments>http://www.dicesare.com/applicativi/elite/come-duplicare-clonare-una-pratica-elite/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 15:37:49 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[Élite]]></category>
		<category><![CDATA[avvocati]]></category>
		<category><![CDATA[avvocato]]></category>
		<category><![CDATA[blugeco]]></category>
		<category><![CDATA[software studi legali]]></category>
		<category><![CDATA[studio legale]]></category>
		<category><![CDATA[studio legale associato]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/applicativi/elite/come-duplicare-clonare-una-pratica/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 9.1999999999981E-5 seconds-->
<!---Displayed in 0.0048440000000001 seconds.-->
Avete bisogno di creare una pratica che è un duplicato di un&#8217;altra. Oppure dovete dividerne una complessa in due. Come fare?
Come duplicare (clonare) una pratica
Élite non dispone di una funzione immediata di duplicazione pratiche; tuttavia, tramite pochi semplici passi, sarà possibile ottenere una nuova pratica che è il duplicato di una già esistente.
Andremo a sfruttare [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 8.5999999999919E-5 seconds-->
<!---Displayed in 0.005432 seconds.-->
<p>Avete bisogno di creare una pratica che è un duplicato di un&#8217;altra. Oppure dovete dividerne una complessa in due. Come fare?<span id="more-769"></span><strong></strong></p>
<p><strong>Come duplicare (clonare) una pratica</strong></p>
<hr />Élite non dispone di una funzione immediata di duplicazione pratiche; tuttavia, tramite pochi semplici passi, sarà possibile ottenere una nuova pratica che è il duplicato di una già esistente.</p>
<p>Andremo a sfruttare la funzione di archiviazione pratiche, in questo modo:</p>
<ul>
<li>evidenziate la pratica che volete duplicare e chiedetene l&#8217;archiviazione</li>
<li>nella finestra di archiviazione selezionate tutte le informazioni e chiedete di &#8216;Mantenere le informazioni originali nell&#8217;archivio&#8217;</li>
<li>date quindi conferma</li>
</ul>
<p>In questo modo avrete la stessa pratica sia nell&#8217;archivio Corrente che in quello Storico</p>
<ul>
<li>portatevi adesso nell&#8217;archivio Storico e selezionate nuovamente la pratica</li>
<li>chiedetene nuovamente l&#8217;archiviazione (dallo Storico viene riportata nel Corrente)</li>
<li>nella finestra di archiviazione selezionate tutte le informazioni e chiedete di <strong><span style="text-decoration: underline;">NON</span></strong>  &#8217;Mantenere le informazioni originali nell&#8217;archivio&#8217;</li>
<li>date quindi conferma</li>
<li>Élite vi segnalerà che la pratica esiste già nell&#8217;archivio di destinazione (è giusto, è proprio quello che ci serve)</li>
<li>tra le opzioni proposte, scegliete &#8216;Crea nuova&#8217;</li>
<li>Élite creerà una nuova pratica aggiungendo il suffisso &#8216;/1&#8242; al Codice Pratica</li>
</ul>
<p>Avete così duplicato la pratica. Se necessita, potrete attribuire un nuovo codice entrando in modifica pratica.</p>
<hr />
<table border="0">
<tbody>
<tr>
<td><a href="http://elite.blugeco.com"><img class="alignnone size-medium wp-image-89" title="eli40logo" src="http://lnx.dicesare.com/wp-content/uploads/2008/09/eli40logo1.gif" alt="" width="109" height="41" /></a></td>
<td>
<h5>Élite è la procedura ideale per la gestione dello studio legale. Informazioni, prezzi e dimostrativo sul sito <a href="http://elite.blugeco.com" target="_blank">Blugeco</a>.</h5>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/applicativi/elite/come-duplicare-clonare-una-pratica-elite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL: trovare (ed eventualmente eliminare) i record duplicati</title>
		<link>http://www.dicesare.com/programmazione/sql/sql-trovare-ed-eventualmente-eliminare-i-record-duplicati/</link>
		<comments>http://www.dicesare.com/programmazione/sql/sql-trovare-ed-eventualmente-eliminare-i-record-duplicati/#comments</comments>
		<pubDate>Fri, 06 Mar 2009 17:22:15 +0000</pubDate>
		<dc:creator>Enrico Di Cesare</dc:creator>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[doppioni]]></category>
		<category><![CDATA[duplicates]]></category>
		<category><![CDATA[duplicati]]></category>
		<category><![CDATA[exec]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[record doppi]]></category>
		<category><![CDATA[record duplicati]]></category>
		<category><![CDATA[row_number]]></category>
		<category><![CDATA[sp]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[sql server 2005]]></category>
		<category><![CDATA[stored procedure]]></category>
		<category><![CDATA[stored procedures]]></category>

		<guid isPermaLink="false">http://www.dicesare.com/programmazione/sql/trovare-ed-eventualmente-eliminare-i-record-duplicati/</guid>
		<description><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 8.8000000000088E-5 seconds-->
<!---Displayed in 0.005518 seconds.-->
In questo articolo spiegherò come selezionare (e poi eventualmente eliminare) i record duplicati di una tabella, usando SQL 2005.
Può capitare che in una tabella ci siano dei record (righe) duplicati. Rintracciarli per poi eliminarli è sempre una faccenda noisa.
Per fare questo possiamo avvalerci della funzione di numerazione righe ROW_NUMBER() di MS SQL Server 2005.
Ad esempio, questa query:

SELECT  ROW_NUMBER() [...]]]></description>
			<content:encoded><![CDATA[<!--Searching /web/htdocs/www.dicesare.com/home/wp-content/plugins/random-image: found 4 images in 8.5000000000002E-5 seconds-->
<!---Displayed in 0.00519 seconds.-->
<p>In questo articolo spiegherò come selezionare (e poi eventualmente eliminare) i record duplicati di una tabella, usando SQL 2005.</p>
<p><span id="more-767"></span>Può capitare che in una tabella ci siano dei record (righe) duplicati. Rintracciarli per poi eliminarli è sempre una faccenda noisa.</p>
<p>Per fare questo possiamo avvalerci della funzione di numerazione righe ROW_NUMBER() di MS SQL Server 2005.</p>
<p>Ad esempio, questa query:</p>
<pre class="brush: sql">
SELECT  ROW_NUMBER() OVER(PARTITION BY PART_IVA ORDER BY CODICE) AS [RowNumber]
      , PART_IVA
      , CODICE
FROM  CLIENTI
</pre>
<p>elencherà tutti i Clienti, numerandoli progressivamente quando hanno la stessa Partita IVA ( &#8230; PARTITION BY PART_IVA &#8230; ).</p>
<p>Per evidenziare i duplicati, basterà aggiungere una WHERE, così</p>
<pre class="brush: sql">
SELECT * FROM (
   SELECT  ROW_NUMBER() OVER(PARTITION BY PART_IVA ORDER BY CODICE) AS [RowNumber]
         , PART_IVA
         , CODICE
   FROM  CLIENTI
   ) AS T1
WHERE RowNumber&gt;1
</pre>
<p>Similarmente, potremo usare lo stesso stratagemma per eliminare tutti i doppioni</p>
<pre class="brush: sql">
 DELETE T1 FROM (
   SELECT  ROW_NUMBER() OVER(PARTITION BY PART_IVA ORDER BY CODICE) AS [RowNumber]
         , PART_IVA
         , CODICE
   FROM  CLIENTI
   ) AS T1
  WHERE T1.RowNumber &gt;1
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.dicesare.com/programmazione/sql/sql-trovare-ed-eventualmente-eliminare-i-record-duplicati/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
