Cmportamento decisamente "sgradevole" di Sql Server Management Studio ...

giovedì 19 luglio 2012 - 10.14
Tag Elenco Tags  C#  |  SQL Server 2008 R2  |  SQL Server 2008

andrestu Profilo | Expert

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

>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

>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

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

>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










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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5