it-swarm.com.de

SQL Server, das eine Tabelle mit gruppiertem Index ohne Primärschlüssel erstellt

Ist es möglich, einen Clustered-Index aus einer Anweisung "Create Table" in SQL Server 2008 zu erstellen, die kein Primärschlüssel ist? 

Der Zweck davon ist für eine Tabelle in SQL Azure, daher ist es keine Option für mich, zuerst die Tabelle zu erstellen und dann den gruppierten Index für die Tabelle zu erstellen.

Edit: Anscheinend hat FluentMigrator meine Probleme verursacht. Die Versionstabelle hat keinen gruppierten Index. Daher ist beim Versuch, die Versionierungstabelle und nicht meine Tabelle zu erstellen, ein Fehler aufgetreten.

15
Chris Marisic

Ja, es ist möglich, einen Clustered-Index zu erstellen, der nicht der Primärschlüssel ist. Verwenden Sie einfach eine CREATE CLUSTERED INDEX -Anweisung.

CREATE TABLE dbo.myTable (
    myTableId int PRIMARY KEY NONCLUSTERED
    myColumn int NOT NULL
)

CREATE CLUSTERED INDEX myIndex ON dbo.myTable(myColumn)

Vor der Version Azure SQL Database v12 mussten Sie über einen Clusterindex verfügen, bevor Sie Daten in eine Tabelle einfügen konnten. Ab Azure SQL Database v12 werden jetzt Heaps (Tabellen ohne Clustered-Index) unterstützt.

Wenn Ihre Datenbank vor Juni 2016 erstellt wurde, finden Sie hier die Anweisungen zum Upgrade auf Version 12 .

39
Rob Boek
CREATE TABLE dbo.Table_1
    (
    Id int NOT NULL IDENTITY (1, 1) PRIMARY KEY NONCLUSTERED,
    SomeOtherUniqueColumn int NOT NULL CONSTRAINT Item4 UNIQUE CLUSTERED
)  ON [PRIMARY]

beachten Sie die Angabe von nonclustered auf dem Primärschlüssel

Das wird noch funktionieren.

CREATE TABLE dbo.Table_1
    (
    SomeOtherUniqueColumn int NOT NULL CONSTRAINT Item4 UNIQUE CLUSTERED
)  ON [PRIMARY]
7
Buildstarted

Der folgende Code ist mit Azure kompatibel. Es erstellt einen nicht gruppierten Primärschlüssel und einen gruppierten Index in einer einzigen Anweisung für die Erstellung von Tabellen. Mit dieser Syntax können Sie auch mehr als eine Spalte in Ihrem Schlüssel angeben.

CREATE TABLE MyTable (
    ID uniqueidentifier  NOT NULL,
    UserID uniqueidentifier  NOT NULL,
    EntryDate DATETIME NOT NULL,
    CONSTRAINT PK_MyPrimaryKey_Name PRIMARY KEY NONCLUSTERED (ID),
    CONSTRAINT UCI_MyClusteredIndexName UNIQUE CLUSTERED (UserID ASC,EntryDate ASC,ID ASC)
);

Um einen Clusterindex für Tabellen zu ändern, muss der Clusteredd-Index gelöscht werden, wodurch die Tabelle in einen Heap umgewandelt wird. Anschließend wird der neue Clustered-Index angewendet. Da Azure keine Heaps (Tabellen ohne Clustered-Indizes) unterstützt, ist es nicht möglich, den Clustered-Index zu ändern, ohne die Tabelle zu löschen und neu zu erstellen. In Azure können Sie keinen Clustered-Index an einer anderen Stelle als der Tabellenerstellungsanweisung angeben.

0
David Sopko