Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie setze und indiziere ich zwei Spalten einer in T-SQL deklarierten Tabellenvariablen?

Sie können Erstellen Sie einen nicht gruppierten Index wie folgt.

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

Wenn die Absicht ist, dass Col1, Col2 selbst einzigartig sind, entfernen Sie PK aus der Spaltenliste.

Obwohl es auf den ersten Blick so aussieht, als hätte dies eine zusätzliche Spalte in (PK ) ist die Indexstruktur die gleiche wie beim Erstellen eines nicht eindeutigen Index nur für Col1, Col2 auf einem #temp Tabelle.

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)

Für einen nicht eindeutigen nicht gruppierten Index fügt SQL Server den CI-Schlüssel sowieso immer implizit zum NCI-Schlüssel hinzu. Dies zeigt es nur explizit.

Siehe Kalen Delaney Weitere Informationen Nicht gruppierte Indexschlüssel