1 0 Tag Archives: SQL Server
post icon

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

As a database designer, I often create on database tables the primary key as identity autoincrement and sometimes I needed to find missing or deleted IDs thet interrupt the sequence of autoincrement number on the primary key.
To do this you can create a sequence from 1 (or 0 based on setted RESEED) to MAX ID available on the table and than make a LEFT JOIN of this sequence with start table.

The following snippet get the list of IDs of identity autoincrement column that interrupt the sequence of autoincrement values:

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

When you modify database schema on Sql Server with Microsoft SQL Server Management Studio you can simply create script with Generate Change Script function.

This is not allowed when you rename a database object, for example when you rename a table (F2 key) or rename Stored Procedure, but also when you rename a table column and so on.

In this situation you can use the system stored procedure sp_rename (Transact-SQL).

Below some utilization examples:

Rename table on database:

EXEC sp_rename 'Vecchio_Nome_Tabella', 'Nuovo_Nome_Tabella';

Rename table column on database:

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

Applies to SQL Server 2005 / 2008.

September 16th, 2011 @ 03:47
post icon

T-SQL Query to list Identity columns into DataBase

The following snippet shows how to find identity columns inside database.
You can also apply where condition to filter on a table name.

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

Enjoy snippet!

May 21st, 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)

March 26th, 2010 @ 10:15