settembre 2004 - Posts
Oggi giochiamo con l'AS400. Bene.
Ingredienti: SQL Server con un bel linked server.
Vogliamo eseguire delle query tramite openQuery, su una bella vista, ad esempio:
select * from openQuery(AS400, 'select * from vista where CAMPO = ''09180''')
Puo' capitare che il resultset di ritorno non sia corretto.
Ovvero: la mia query tornava 181 record, invece di 252.
Ma perchè ?!?!
Verificando un pò ... è uscito il coniglio dal cilindro!
E' necessario effettuare una modifica della configurazione del driver ODBC di connessione verso AS400.
Dal pannello di controllo: driver ODBC - System DNS - AS400 - Configurazione
Scheda "Prestazioni", poi "Avanzate", togliere la spunta all'opzione "Utilizzare il blocco con una fetch di 1 riga".
Mi chiedo: avete riscontrato cose del genere?
Altra domanda/risposta nata sul newsgroup...
Vogliamo popolare un dataset con del XML proveniente da una query su SQL Server.
Esiste una sostanziale differenza tra utilizzare:
a) SELECT * FROM Region FOR XML AUTO
b) SELECT * FROM Region FOR XML AUTO, ELEMENTS
Se con la prima istruzione è sufficiente richiamare il metodo ReadXml sul dataset, passandogli l'oggetto XmlReader:
SqlConnection cn = new SqlConnection(.....);
SqlCommand cmd = cn.CreateCommand();
cmd.CommandText = "SELECT * FROM Region FOR XML AUTO, ELEMENTS";
cn.Open();
XmlReader reader = cmd.ExecuteXmlReader();
DataSet ds = new DataSet();
ds.ReadXml( reader );
...
ds.Dispose();
cn.Dispose();
Con la seconda query, ovvero FOR XML AUTO, ELEMENTS è necessario ciclare il reader per popolare il dataset:
while ( !reader.EOF )
{
ds.ReadXml( reader );
}
Infatti la sola istruzione
ds.ReadXml( reader );
produrrebbe la lettura solo del primo record.
Perché?
Guardando come lavora il metodo ExecuteXmlReader con reflector si può notare questo:
return new XmlTextReader(stream1, XmlNodeType.Element, null);
Quindi con l'XML prodotto con "FOR XML AUTO, ELEMENTS" il metodo tornerà un elemento alla volta.
Dai books online di sql server:
"... query specifies the ELEMENT option. Therefore, an element-centric document is returned."
Andando alla ricerca di font ho trovato questo sito che non conoscevo.
Molti sono gratuiti, tutti hanno una preview decente... insomma può essere una risorsa interessante.
P.s.: girogooglando = fare un giro tramite google ;-))
Avevo bisogno di recuperare l'ultimo giorno del mese...
select dateadd(ss, -1, dateadd(mm, datediff(m, 0, getdate()) + 1, 0))
Analizziamo questa select passo - passo:
/*Trovo il numero di mesi passati dalla data '0':*/
select datediff(mm, 0, getdate())
/*Infatti: select dateadd(mm,0,0) --> 1900-01-01 00:00:00.000*/
/*Aggiungo a questo numero un mese
In questo modo trovo il primo giorno del mese successivo a quello in cui sono,
qualcosa come:
select dateadd(mm,1257,0)*/
select dateadd(mm, datediff(m, 0, getdate()) + 1, 0)
/*Tolgo un secondo alla data trovata, qualcosa come:
select dateadd(ss, -1, '2004/10/01')*/
Ed ecco:
select dateadd(ss, -1, dateadd(mm, datediff(m, 0, getdate()) + 1, 0))
Tools, utility, add-in per .Net.
Qui
Qui è possibile visualizzare la lista dei bugs corretti con il rilascio del primo service pack per .Net 1.1
E' disponibile il download di alcuni capitoli di libri relativi alla nuova versione di SQL Server.
Qui.
Che storia! Google come le Pagine Gialle?
Per ora solo in Canada. Qui
Intanto, sempre da buon "googlista" aspetto la versione italiana... ;-)
La domanda, stimolante, è nata oggi sul newsgroup microsoft.public.it.sql.
Lo scenario: supponiamo di avere, nel nostro database, piu' tabelle contenenti un campo [cognome].
Supponiamo di averlo definito come varchar(35) e di volerlo portare, adesso, ad una dimensione di 50 caratteri.
Come poter realizzare un'istruzione che si preoccupi, in una volta sola, di modificare tutte le strutture delle tabelle che lo contengono?
La mia risposta:
DECLARE @colname VARCHAR(50)
DECLARE @newType VARCHAR(50)
DECLARE @sql VARCHAR(255)
/* Imposto il nome di colonna che voglio modificare e la nuova dimensione */
SET @colname = 'COGNOME'
SET @newType = 'VARCHAR(50)'
/* Costruisco l'istruzione da lanciare su ogni tabella */
SET @sql = 'IF COL_LENGTH(PARSENAME(''?'',1), '''+@colname+''') IS NOT NULL EXEC (''ALTER TABLE ? ALTER COLUMN '+@colname+' ' + @newType + ''')'
/* Eseguo */
EXEC sp_msForEachTable @sql
Oppure, in una sola istruzione:
EXEC sp_msForEachTable 'IF COL_LENGTH(PARSENAME(''?'',1), ''cognome'') IS NOT NULL EXEC (''ALTER TABLE ? ALTER COLUMN cognome varchar(50)'')'
Pure text: copy / paste di solo testo, ovvero per portarmi "dietro" quello che mi interessa, senza alcuna formattazione (leggi: copia da pagine web per esempio...)
Leggo qui e qui che Google (già la voce circolava da tempo) potrebbe realizzare un browser tutto suo.
Da buon "googlista" aspetto questa "browser strategy" ... fiducioso...
Microsoft ha rilasciato una lista di applicazioni che potrebbero non funzionare con l'installazione del già famosissimo SP2 di Win XP.
Mi segno il link che non si sa mai...
Qui
Dando un'occhiata veloce alle stored procedure di .Text (motore di questo blog) mi sono accorto che Scott non utilizza (o lo utilizza pocchissime volte) l'istruzione SET NOCOUNT ON/OFF.
Ricordo, dai books on line: "Stops the message indicating the number of rows affected by a Transact-SQL statement from being returned as part of the results."
Non so se i boss di Devleap avevano già verificato ed eventualmente modificato ...
Mi associo anche io al coro, lanciato da Corrado , relativamente alla scelta di Microsoft di reintrodurre il concetto di default instance della form.
Ma perchè, mi chiedo, si vuole utilizzare un linguaggio ad oggetti come se non lo fosse?
Se qualcuno la pensa così... il feedback lo trovate qui.
Durante una chiacchierata con un amico esce la solita (l'ho sentita spesso) domanda:
"Ma perchè parli sempre di lavoro?"
Da lì è nato il ragionamento che mi ha portato, alla sua conclusione, a definirmi un privilegiato.
Perchè?
Perchè se lavorassi in banca (beati loro ;-)) non parlerei sempre di lavoro.
Ma siccome:
- ho la fortuna di aver fatto diventare la mia passione il mio lavoro,
- ho la fortuna di poter scatenare la mia fantasia (non siamo un pò tutti artisti?)
- ho la fortuna di poter sperimentare tecnologie, soluzioni, strumenti, ...
- ho la fortuna di fare tante cose (leggi progetti diversi) e non registro fatture per 8 ore...
- quando parlo di webService, serializzazioni, hashTable, xml, xsd, ecc... nessuno capisce nulla e sembra che sappia chissà cosa ;-)))
- mia moglie non ha ancora capito che lavoro faccio (ed il problema sarà spiegarlo a mia figlia... quando arriverà...) e va in crisi quando glielo chiedono...
Non devo considerarmi fortunato?
E' come se ad un appassionato di donne chiedessi di non parlare di ...ehm...
No?
More Posts
Next page »