Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment définir et indexer sur deux colonnes de variable de table déclarée T-SQL ?

Vous pouvez créez un index non clusterisé comme suit.

DECLARE @t TABLE (
  PK   INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
  Col1 INT,
  Col2 INT,
  UNIQUE (Col1, Col2, PK)) 

Si l'intention est que Col1, Col2 sont uniques eux-mêmes puis supprimez PK de la liste des colonnes.

Bien qu'il apparaisse à sa valeur nominale comme si cela avait ajouté une colonne supplémentaire dans (PK ) la structure de l'index sera la même que la création d'un index non unique uniquement sur Col1, Col2 sur un #temp tableau.

CREATE TABLE #T  (
  PK   INT IDENTITY(1, 1) PRIMARY KEY CLUSTERED,
  Col1 INT,
  Col2 INT) 

/*PK added in to end of key anyway*/  
CREATE NONCLUSTERED INDEX ix ON #T(Col1, Col2)

pour un index non clusterisé non unique, SQL Server ajoute toujours implicitement la clé CI à la clé NCI. Cela le montre simplement explicitement.

Voir Kalen Delaney En savoir plus sur Clés d'index non clusterisées