Sql-Server-2005

Primary Key e Clusterd-Index di una tabella coincidono sempre?

Davide Mauri

No necessariamente. Infatti l’indice clustered e la chiave primaria di una tabella sono due cose nettamente distinte fra loro: - la chiave primaria è un vincolo che assicura l’univocità di ogni riga della tabella - un indice clustered è un struttura B+Tree che determina un ordinamento specifico dei dati della tabella nelle pagine di dati. Di fatto, però, SQL Server implementa il vincolo di chiave primaria attraverso un ‘unique index’ di tipo ‘clustered’, a meno che venga prima creata la tabella priva di chiave primaria, quindi aggiunto l’indice clusterd, infine aggiunto il vincolo di chiave primaria che sarà quindi implementata attraverso un ‘unique index’ di tipo ’non-clustered’

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.

Verificare l'esistenza di un file

Davide Mauri

Con queste poche dighe di codice è possibile verificare - unicamente mediante T-SQL - l’esistenza o meno di un file:

create table [#cmdoutput]
(
[output] nvarchar(1024)
)
go

insert into [#cmdoutput] ([output])
exec xp_cmdshell ‘dir /b \\tauceti2\c$\autoexec.bat’
go

declare @exists int
select @exists = count(*) from #cmdoutput where [output] is not null
if (@exists > 0) print ‘Exists’ else print ‘Not Exists’
go

drop table [#cmdoutput]
go