Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Cmportamento decisamente "sgradevole" di Sql Server Management Studio ...
giovedì 19 luglio 2012 - 10.14
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
SQL Server 2008 R2
|
SQL Server 2008
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
gio 19 lug 2012 - 10:14
Salve a tutti,
invio questo post perchè mi è già successo più di una volta di riscontrare un comportamento anomalo da parte del design di Sql Management Studio e cioè:
ammettiamo che ho una tabella già configurata con dei campi prestabiliti e delle relazioni (chiavi primarie) verso altre tabelle e sempre in questa tabella ci sono già un tot di record inseriti.
a questo punto ammettiamo che voglia aggiungere una colonna che NON accetta valori NULL, dopo averla inserita, al momento del salvataggio ovviamente riceverò un errore perchè ci sono già all'interno dei record che non potranno essere aggiornati visto che quel nuovo campo non accetta valori NULL.
e fin qui tutto ok senonchè mi accorgo che oltre a notificarmi l'errore Sql Server Management Studio mi tronca in automatico le relazioni verso altre tabelle di campi che non ho assolutamente toccato, come se facessi un eliminazione delle relazioni!!!
cioè è un comportamento decisamente del C...O !!! scusate ma alle volte ci vuole!!!
avete riscontrato tale problema???
dipende da un bug o da qualche impostazione definita da qualche parte???
Andrea Restucci - Web Developer
TomClancy
Profilo
| Junior Member
79
messaggi | Data Invio:
gio 19 lug 2012 - 21:51
>Salve a tutti,
Salve Andrea
>invio questo post perchè mi è già successo più di una volta di
>riscontrare un comportamento anomalo da parte del design di Sql
>Management Studio e cioè:
>ammettiamo che ho una tabella già configurata con dei campi prestabiliti
>e delle relazioni (chiavi primarie) verso altre tabelle e sempre
>in questa tabella ci sono già un tot di record inseriti.
Intendi dire che hai sia delle primary key che delle foreign key... giusto? quindi della chiavi primarie e delle chiavi esterne
>a questo punto ammettiamo che voglia aggiungere una colonna che
>NON accetta valori NULL, dopo averla inserita, al momento del
>salvataggio ovviamente riceverò un errore perchè ci sono già
>all'interno dei record che non potranno essere aggiornati visto
>che quel nuovo campo non accetta valori NULL.
potresti provare ad aggiungere la colonna definendo un default oltre che a dire che la vuoi not null
http://msdn.microsoft.com/en-us/library/ms190273.aspx
>e fin qui tutto ok senonchè mi accorgo che oltre a notificarmi
>l'errore Sql Server Management Studio mi tronca in automatico
>le relazioni verso altre tabelle di campi che non ho assolutamente
>toccato, come se facessi un eliminazione delle relazioni!!!
>cioè è un comportamento decisamente del C...O !!! scusate ma
>alle volte ci vuole!!!
>avete riscontrato tale problema???
>dipende da un bug o da qualche impostazione definita da qualche
>parte???
... a me questo non accade... per fare la modifica usi l'interfaccia del management studio?
Michele Levada
renarig
Profilo
| Expert
517
messaggi | Data Invio:
gio 19 lug 2012 - 22:03
>avete riscontrato tale problema???
>dipende da un bug o da qualche impostazione definita da qualche
>parte???
Mi è capitato una volta ai tempi di SQL2000 ( MSDN )
e solamente questa sera ne ho capito il motivo
Non si tratta propriamente di un Bug ma è il comportamento
dei DB Relazionali ( Pensi che anche in Oracle e MySql c'è la stessa caratteristica )
_______________________________________________________________
Provo a darti al mia interpretazione
____________________________________________________________
Innanzi tutto se usi SQL2008 per fare quella operazione che descrivi
( Aggiungere un campo ( magari in mezzo agli altri campi ))
hai deselezionato in ManagementStudio
__ Strumenti
___Opzioni
____Finestra di Progettazione
_____ Impedisci Salvataggio di Modifiche per cui è necessario ricreare la tabella
( Quindi un po di responsabilita la hai anche te )
____________________________________________________________________
Se tu non avessi usato lo strumento grafico ma la istruzione ALTER TABLE
il tuo campo sarebbe finito inesorabilmente in coda agli altri campi
______________________________________________________________________
Con lo strumento grafico ( DESELEZIONANDO LA OPZIONE citata sopra )
lo puoi inserire dove vuoi
Pero sappi che SQL deve:
Eliminare le 2 ( o piu ) tabelle interessate dalle relazioni
Naturalmente anche le Key, Relazioni ecc.
Poi deve ricostruire tutto
________________________________________________________________________
Questo e quello che ha cominciato a fare ma poi è subentrato l'errore del campo NotNull!!!
_________________________________________________________________________
_________________________________________________________________________
_________________________________________________________________________
_________________________________________________________________________
Non so se mi sono spiegato bene,
Provo a rispiegarmi diversamente
Fatti un banale DB con 2 tabelle e una relazione e un po di dati
Aggiungi in CODA alla tabella figlia un campo che NON ammette Null
PRIMA DI SALVARE clicca sul pulsante
"Genera Script delle modifiche" Tutto a Sx dello schermo
Quella è appunto la traduzione di quello che hai fatto graficamente
e se la leggi ti accorgi che è solo una ALTER TABLE
Adesso salvi, Va in errore ma non perdi le relazioni
_____________________________________________________________________________
Aggiungi adesso un campo NON in coda ma in mezzo agli altri campi
sempre della tabella figlia
Prima di salvare leggi ancora lo Script,
Vedrai che è molto piu complesso e prevede fra le prime righe
" DROP CONSTRAINT ecc " che significa "Elimina relazione "
( Quello script elimina le tue tabelle con annessi e connessi
e le ricostruisce identiche ( con un campo in piu))
Poi tenta di salvare la tabella e vedrai che SQL ti avvertira
__ Tabella xxx salvata
__ Tabella yyy non salvata
______________________________________________________________________
So di essere stato poco chiaro, ma spero comprensibile
_______________________________________________________________________
Devi abituarti ad abbandonare lo strumento grafico e ad usare solo Script di SQL
_____________________________________________________________________
Facci sapere
Saluti
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
ven 20 lug 2012 - 07:31
Grazie ragazzi delle risposte,
utilizzo Sql Server 2008 ed effettivamente subito dopo aver scritto il post mi è venuto in mente quale potrebbe essere la causa di questo comportamento e in effetti pensandoci bene (come suggerisce renarig) mi sono ricordato che avevo cambiato l'impostazione:
__ Strumenti
___Opzioni
____Finestra di Progettazione
_____ Impedisci Salvataggio di Modifiche per cui è necessario ricreare la tabella
proprio per poter fare le modifiche "al volo" da interfaccia grafica di Studio Management.
Quindi i conti tornano, se ad ogni aggiunta di campo deve ricostruire tabelle e relazioni allora è anche normale questo comportamento, è che magari i progettisti dovrebbero pensare ad una specie di "annullamento delle operazioni" in caso di errore, però forse chiedo troppo...
per quanto riguarda l'utilizzo dell'interfaccia grafica trovo che sia uno strumento molto efficace e veloce, basta fare un pò di attenzione, certo che se si ha piena padronanza nell'uso degli script allora si gestisce il tutto con più efficenza ma non è sicurmante il mio caso.
Visto che siamo in tema vi chiedo un altra cosa, esistono alternative valide preferibilmente free, per gestire Sql graficamente ???
Andrea Restucci - Web Developer
renarig
Profilo
| Expert
517
messaggi | Data Invio:
ven 20 lug 2012 - 13:04
>Quindi i conti tornano, se ad ogni aggiunta di campo deve ricostruire
>tabelle e relazioni allora è anche normale questo comportamento,
Se il campo lo aggiungi in coda agli altri non ti ricrea "Tutto"
ma ti aggiunge solamente il campo
questo perche i campi vengpno "impaccati" uno dietro l'altro
_______________________________________________________________
>è che magari i progettisti dovrebbero pensare ad una specie di
>"annullamento delle operazioni" in caso di errore, però forse
>chiedo troppo...
Si è piu complicato di quello che immaginiamo,
SQLServer dal 2008 ci ha messo quella pezza del flag sulle Opzioni
Altri DB "altisonamti" non hanno neanche quella pezza
_________________________________________________________
>per quanto riguarda l'utilizzo dell'interfaccia grafica trovo
>che sia uno strumento molto efficace e veloce, basta fare un
>pò di attenzione, certo che se si ha piena padronanza nell'uso
>degli script allora si gestisce il tutto con più efficenza ma
>non è sicurmante il mio caso.
Non occorre la piena padronanza
Quando usi poche volte gli Script ti accorgi che sono molto
ma molto piu semplici dell'interfccia grafica
________________________________________________________
>Visto che siamo in tema vi chiedo un altra cosa, esistono alternative
>valide preferibilmente free, per gestire Sql graficamente ???
Fra le interfacce grafiche a parer mio la migliore è la Nativa Management Studio
con cui puoi fare la autocomposizione degli Script
__________________________________________________________
__________________________________________________________
__________________________________________________________
Per esempio se ti capita spesso di aggiungere campi
e non ti piacciono sempre in coda alla tabella
( se devi aggiungere il sito web e + bello che sia dopo l'indirizzo Mail )
Se vuoi evitare d'ora in poi di eliminare e ricostruire
inconsapevolmente delle tabelle
Devi ( a parer mio )
Costruirti uno script specifico che:
1___ Crea una tabella di appoggio ( Chiamiamola TA )identica
alla tabella originale ( Chiamiamola TO )
2___ Copia Tutti i dati da TO a TA
( non servirebbero tutti ma cosi sei piu tranquillo )
3___ Elimina ( DROP ) i campi da TO cominciando dal fondo
lasciando pero le chiavi Primarie e secondarie
Lasciando i campi indicizzati
Lasciando i campi con dei vincoli
Lasciandi i campi "Importanti "
( Questo ti salva le relazioni e la parte importante della tabella )
4___ Riaggiungi in TO i vecchi campi e i nuovi campi nella posizione che vuoi
( i campi sono vuoti )
5___ Copi i dati che ti servono da TA a TO
6___ Interrompi lo script
7___ Verifichi la nuova tabella TO
8___ Elimini la tabella TA se va tutto bene
Sembra lungo ma uno script di questo tipo ben fatto è molto molto
meno impegnativo ( per il DB ) della eliminazione e ricreazione di tabelle intere
_________________________________________________________
Saluti
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !