Newsgroup: it.comp.software.database
Titolo: è importante l'ordine delle colonne in sql server ?

MS SQL SERVER 2005 : Ho cancellato per errore una colonna su una tabella 
contenente 10 colonne , ma non mi ricordo in che posizione fosse .
Se uso il comando alter table add column etc..  me la aggiunge al fondo , va 
bene lo stesso ?
E' importante l'ordine delle colonne ?
ciao grazie 

 E' importante l'ordine delle colonne ?
dipende da chi fa le query (e come le fa)
-- 
By ZeD

"vittorio"

In teoria l'ordine e` (e deve essere per vari buoni motivi)
irrilevante.
In pratica ci sono alcune estensioni all'SQL che permettono
di riferirsi alle colonne non tramite il loro nome ma in base
al numero d'ordine che la loro posizione assume all'interno di
una determinata tabella.
La devastante assurdita' di scrivere query in questo modo
risulta chiara quando, cancellando colonne, le vecchie query
fanno riferimento ad altre colonne, con risultati pirotecnici.

 E' importante l'ordine delle colonne ?
Solo se a livello applicativo hai la pessima idea di referenziare le colonne in
base alla loro posizione e non in base al loro nome.
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Non attribuire alla malizia cio` che puo` essere spiegato
con l'incompetenza.
    --Napoleone

 bene lo stesso ?
impossibile saperlo, dipende da cosa ci dovevi fare con quella
colonna. Di certo, riaggiungerla non ti farà magicamente ricomparire
gli eventuali dati ivi presenti. Sarebbe preferibile restorare da un
backup la tabella com'era prima del comando fatale...
bye!

 colonne in base alla loro posizione e non in base al loro nome.
Personalmente faccio fatica a capire sia quale sia il sistema che si basa 
sull'ordine delle colonne (forse un db column based), sia quale sia il 
sistema di interfacciamento che faccia lo stesso. Posto che una query del 
tipo "SELECT * FROM pippo" sarebbe da evitare nel modo piu` categorico, 
qualsiasi sistema di programmazione, nonche` qualsiasi database, si basa 
sull'ordine delle colonne presentato dalla query (eccetto, penso, qualche 
libreria che carica in memoria tutta la tabella, ma quelli sono casi 
particolari)
Enrico

 tabella, ma quelli sono casi particolari)
In python + Mysql , ad esempio, se non usi i DictCursors e fai le 
(mitiche!) select asterisco, è esattamente cio' che ti becchi.
 

 sistema di interfacciamento che faccia lo stesso.
Mah mi vengono in mente strumenti di reporting pensati per casi
generali... certo non è una situazione molto comune.

 sull'ordine delle colonne
Molte interfacce SQL per vari linguaggi possono ritornare i record come array
indicizzati per ordine sia per nome del campo.
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
James Bond: Are these pictures live?
M: Unlike the Americans, we prefer not to get our bad news from CNN.
    --"007 Goldeneye"

 array indicizzati per ordine sia per nome del campo.
Si, ma agiscono sempre sulla query e non sulla tabella. Per farmi capire, si 
consideri la seguente situazione:
/* Inizio codice SQL */
CREATE TABLE test (uno INTEGER, due VARCHAR(30), tre DATE);
/* Fine codice SQL */
/* Inizio codice Java */
Statement stmt = new Statement();
Resultset res = stmt.execute("SELECT tre, due, uno FROM test");
while (res.next()) {
  System.out.println(res.getString(1));
  System.out.println(res.getString(3));
  System.out.println(res.getString(2));
};
/* Fine codice Java */
Il codice in questione funzionera` *sempre*, anche nel momento in cui la 
colonna due verra` droppata e reinserita a fondo della tabella. Questo 
perche` il sistema vede l'ordine immesso nella query e non quello su schema. 
Di certo ci sranno sistemi che ragionano su come e` strutturata la tabella, 
ma sono sistemi particolari e difficilmente lo sviluppatore non ne e` a 
conoscenza
Enrico