Faq

Una Vista che fa uso di SELECT * (star) riconosce le nuove colonne o quelle eliminate?

Davide Mauri

Una vista che utilizza la SELECT * (star) non è in grado di riconoscere una modifica intervenuta nella struttura delle tabelle da cui dipende (sia essa l’aggiunta che la eliminazione di colonna). Questo accade perchè la lista delle colonne viene interpretata solo al momento della CREATE della vista o eventualmente di una successiva ALTER.

Una alternativa alla ALTER è rappresentata dall’uso della stored procedure si sistema SP_REFRESHVIEW [ @viewname = ] ‘viewname’ che aggiorna la struttura della vista in base all’attuale struttura delle tabelle e viste di base. Da notare che se lanciata su una vista creata con l’opzione WITH SCHEMABINDING, la suddetta sp_refreshview restituisce un errore.

Come sapere quale versione di SQL Server sto usando?

Davide Mauri

In questo articolo della KB si spiega come identificare quale versione, service pack ed edizione di SQL Server si sta utilizzando.

L’articolo copre tutte le versioni da SQL Server 6.5 a SQL Server 2005.

http://support.microsoft.com/kb/321185

In questi articoli (non Microsoft) trovate una list consuntiva completa ed aggiornata fino a SQL Server 2008:

http://www.sqlteam.com/article/sql-server-versions

In questi trovate il dettaglio anche delle singole Cumulative Update:

SQL Server 2005

http://www.sqlservercentral.com/articles/Administration/2960/

SQL Server 2008

Una colonna IDENTITY ammette valori duplicati? e valori negativi?

Davide Mauri

Sono due tipici dubbi, il secondo dei quali è causato, probabilmente, dal fatto che una colonna IDENTITY viene usata solitamente come PRIMARY KEY di tabella, assicurando come tale l’univocità dei valori in colonna.

La risposta è “Sì” ad entrambe le domande. Nel caso di valori negativi fanno eccezione ovviamente le colonne di tipo TINYINT (che ammette numeri interi da 0 a 255). Inoltre, il fatto di ammettere valori negativi, può tornare utile in quanto possiamo ottimizzare l’utilizzo del range di valori ammessi dal tipo di dato con cui definiamo la colonna. Per esempio, per un SMALLINT (che occupa 2 byte e ammette da -32.768 a 32.767) possiamo “sfruttare” completamente tale range partendo proprio dal suo limite inferiore di -32.768

Nel log di SQL Server trovo il messaggio "An exception occurred while enqueueing a message in the target queue...". Come posso risolverlo?

Davide Mauri

Utilizzando il Service Broker in modo diretto od indiretto (includendo anche lo sviluppo applicativo, ad esempio facendo uso della SqlDependency oppure della SqlCacheDependency in .NET 2.0) ci si può imbattere in questo errore:

An exception occurred while enqueueing a message in the target queue. Error: 15517, State: 1. Cannot execute as the database principal because the principal “<principal_name>” does not exist, this type of principal cannot be impersonated, or you do not have permission.