SelectEtoile : Base de connaissance SGBD

Posts Tagged 'colonne'

Comment changer la valeur d'une colonne identity sous SQLServer ?

Voici un exemple de table avec une colonne identity :

CREATE TABLE IDENTITYTABLE(Id int IDENTITY(1,1) NOT NULL,c char(1), i int)
go

 

On insère 10 lignes

insert into IDENTITYTABLE values ('a',1)
go 10
select * from IDENTITYTABLE
go

 

Ce qui donne le résultat attendu :

1    a    1
2    a    1
3    a    1
4    a    1
5    a    1
6    a    1
7    a    1
8    a    1
9    a    1
10    a    1

 

Maintenant, on change la valeur de la prochaine identity :

DBCC CHECKIDENT (IDENTITYTABLE, RESEED, 99)
go

Checking identity information: current identity value '10', current column value '99'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

 

On insert à nouveau 10 lignes et voici le résultat obtenu :

1    a    1
2    a    1
3    a    1
4    a    1
5    a    1
6    a    1
7    a    1
8    a    1
9    a    1
10    a    1
100    b    2
101    b    2
102    b    2
103    b    2
104    b    2
105    b    2
106    b    2
107    b    2
108    b    2
109    b    2

 

Nous voyons clairement que l'on passe directement de 10 à 100.

 

 

 

Convertir cellules/lignes en colonnes sous SQLServer

 

On va prendre l'exemple simple d'afficher les colonnes des indexes dans une seule cellule.

Requête :

SELECT
sys.objects.name AS object_name,
sys.indexes.name AS index_name,
case
when (is_unique = 1 and is_primary_key = 1) then 'PK UNIQUE '
when is_unique = 1  then 'UNIQUE '
else ''
end + sys.indexes.type_desc type_desc,
c.index_columns AS index_columns_key
FROM sys.objects
JOIN sys.indexes
ON sys.indexes.object_id=sys.objects.object_id
JOIN
(SELECT distinct
object_id,
index_id,
stuff((SELECT ','+col_name(object_id,column_id ) as 'data()'
FROM sys.index_columns t2
WHERE t1.object_id =t2.object_id
and t1.index_id = t2.index_id
FOR XML PATH ('')),1,1,'') as 'index_columns'
FROM sys.index_columns t1
) c
ON c.index_id = sys.indexes.index_id
AND c.object_id = sys.indexes.object_id
WHERE sys.objects.type='u'
ORDER BY 1

 

Résultat :

object_name index_name type_desc index_columns_key
spt_values spt_valuesclust UNIQUE CLUSTERED name ,number ,type
spt_values ix2_spt_values_nu_nc NONCLUSTERED number ,type