1 0 Tag Archives: SQL Server
post icon

TSQL – How to find missing or deleted table identity autoincrement values

In qualità di database designer, spesso creo la chiave primaria come identity autoincrement sulle tabelle del database ed alcune volte mi è capitato di dover trovare gli ID che sono stati cancellati, per cui interrompono la sequenza dell’identity autoincrement su campo chiave.
Per fare questo si può semplicemente creare una sequenza che va da 1 (oppure 0 in base al RESEED impostato) al MAX ID presente sulla tabella e, successivamente, mettere in LEFT JOIN questa sequenza con la tabella originaria.

Di seguito lo snippet per recuperare gli ID di un campo identity autoincrement che interrompono la sequenza di valori:

DECLARE @START_ID INT,  @MAXID INT

SET @START_ID = 1
SET @MAXID = (SELECT MAX(ID) FROM [TABLENAME_TO_CHECK])

DECLARE @SEQUENCE_TABLE TABLE (ID BIGINT)

--CREATE TABLE WITH ID FROM [@START_ID] TO [MAX TABLE ID]
WHILE @START_ID < @MAXID
	BEGIN
		INSERT INTO @SEQUENCE_TABLE VALUES(@START_ID)

		SET @START_ID = @START_ID + 1
	END

SELECT S.ID AS [MISSING ID] 
FROM @SEQUENCE_TABLE S 
		LEFT JOIN [TABLENAME_TO_CHECK] AS T ON  S.ID = T.ID
WHERE T.ID IS NULL
post icon

T-SQL rename Table Sql Server

Quando si effettuano modifiche alla struttura di un database Sql Server con Microsoft SQL Server Management Studio è possibile ottenere facilmente lo script mediante la funzione Generate Change Script.

Questo non accade quando si rinomina un oggetto del database, ad esempio quando si rinomina una tabella (F2) o una Stored Procedure, ma anche una quandi si rinomina la colonna di una tabella e così via.

In questi casi è possibile utilizzare la stored procedure di sistema sp_rename (Transact-SQL).

Di seguito alcuni esempi di utilizzo:

Rinominare una tabella del database:

EXEC sp_rename 'Vecchio_Nome_Tabella', 'Nuovo_Nome_Tabella';

Rinominare una colonna di una tabella del database:

EXEC sp_rename 'Nome_Tabella.Vecchio_Nome_Colonna', 'Nuovo_Nome_Colonna', 'COLUMN';

Si applica a SQL Server 2005 / 2008.

16 settembre 2011 @ 15:47
post icon

T-SQL Cercare le colonne di tipo Identity in un Database

Di seguito uno snippet utile per cercare nel database le colonne che sono Identity.
Si può anche applicare una condizione per filtrare la ricerca su una specifica tabella.

SELECT *
FROM sys.tables T
 INNER JOIN sys.columns C
  ON T.object_id = C.object_id
WHERE C.is_identity = 1

Enjoy snippet!

21 maggio 2010 @ 09:43
post icon

T-SQL: Query Performance – Tips & Tricks

T-SQL: Alcuni accorgimenti per migliorare le prestazioni delle interrogazioni al database

Spesso scriviamo query senza badare tanto alle performance, non tanto in termini di query (che è comunque importante), ma in termini di come ragiona il DBMS (DataBase Management System).

Tip 1: E’ possibile sfruttare i Piani di esecuzione (Execution Plan) che il DBMS si crea per ottimizzare le query è necessario specificare sempre il nome completo degli oggetti come schema.NomeOggetto (es: [dbo].[Categories]).

Molto spesso, infatti, si tende ad omettere il nome dello Schema.

Tip 2: Utilizzare la clausola NOLOCK nelle query di SELECT in modo da limitare i lock sulle tabelle. Attenzione, però, che la clausola NOLOCK imposta il livello di isolamento a UncommittedRead, per cui restituisce anche i record per cui non è stata fatta la commit. Capite, dunque, che è possibile sfruttare la clausola al di fuori di ambienti transazionali, limitando i lock alle tabelle.

USE [Northwind]
GO 

SELECT  [CategoryID],
    [CategoryName],
    [Description]
FROM [dbo].[Categories]

WITH(NOLOCK)

Enjoy snippet!

post icon

Set maxdate by TSQL statement

Spesso mi è servito impostare una data al valore Maxdate (31/12/9999 23.59.59) da statement SQL.

Lo snippet è il seguente:

UPDATE TABELLA
SET DATA = CAST('9999-12-31 23:59:59' AS DATETIME)

Analogamente si può impostare il Mindate (1/1/1753 00:00:00)

26 marzo 2010 @ 10:15