Heidisql: AUTO_INCREMENT funktioniert nicht auf MSSQL-Servern

Erstellt am 30. Okt. 2018  ·  5Kommentare  ·  Quelle: HeidiSQL/HeidiSQL

Schritte zum Reproduzieren dieses Problems

  1. Erstellen Sie eine Tabelle auf einem SQL-Server;
  2. Fügen Sie eine ID-Spalte hinzu;
  3. Legen Sie fest, dass die ID-Spalte automatisch inkrementiert wird, indem Sie den Standardwert auf AUTO_INCREMENT setzen;
  4. Speichern Sie die Tabelle. Dies kann dazu führen, dass die Tabelle erstellt oder aktualisiert wird. Dies schlägt fehl.

Aktuelles Verhalten

Die Tabelle wird nicht erstellt oder geändert.
Es gibt einen Fehler im AUTO_INCREMENT-Teil der Anweisung.

Erwartetes Verhalten

Es sollte die Tabelle erstellen oder aktualisieren.
Es sollte keinen Fehler geben.

Mögliche Lösung

Statt AUTO_INCREMENT zu verwenden, erfordert SQL Server IDENTITY(1,1).
Die erste Zahl in Klammern ist der Startwert, die zweite die Schrittweite.
Beispiel:
TABELLE ERSTELLEN Personen (
ID int IDENTITÄT (1,1) PRIMÄRSCHLÜSSEL,
Name varchar(255) NOT NULL
);

Umfeld

  • HeidiSQL-Version:
    9.5.0.5315, neuster nächtlicher Build. Eigentlich möchte ich gar keinen Nightly Build verwenden, sondern einen Stable Build.
  • Datenbanksystem und Version:
    SQL-Server, alle Versionen.
  • Betriebssystem:
    Windows 10 auf dem Client, unbekannt auf dem Server.

Alle 5 Kommentare

Ist das eine große Veränderung? Wäre es einfach für eine erste PR?

Ich habe das gleiche Problem.
Gibt es eine Lösung für dieses Problem?

Oh Gott! Es ist 2020 und das ist noch offen. Bitte Leute, behebt das so schnell wie möglich.
FYI: Ich verwende HeidiSql v10.3

Passiert heute auch dazu. Einer der einzigen Gründe, warum ich SSMS öffnen muss :(

Hier ist ein Skript zum Generieren einer Tabelle auf MS SQL 12.0.5223.6, das das Problem veranschaulicht:

CREATE TABLE [dbo].[User](
    [Username] [nvarchar](20) NOT NULL,
    [FullName] [nvarchar](50) NOT NULL,
    [EmailAddress] [nvarchar](100) NULL,
    [LastLoginDate] [datetime] NULL,
    [IsAdministrator] [bit] NULL,
    [Roles] [int] NOT NULL,
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [CreatedAt] [datetime2](7) NOT NULL,
    [CreatedBy] [nvarchar](20) NOT NULL,
    [ModifiedAt] [datetime2](7) NULL,
    [ModifiedBy] [nvarchar](20) NULL,
    [LastPortfolioId] [int] NULL,
 CONSTRAINT [PK__User__536C85E5B3CDBFE3] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[User] ADD  DEFAULT (getdate()) FOR [CreatedAt]
GO

ALTER TABLE [dbo].[User] ADD  DEFAULT (suser_sname()) FOR [CreatedBy]
GO

HeidiSQL 10.3.0.5838 erkennt den Primärschlüssel nicht:
image

Hier ist ein Skript, das Primärschlüsselindizes auf MS SQL auswählt (wahrscheinlich nicht sehr frühe Versionen von MS SQL):

select schema_name(tab.schema_id) as [schema_name], 
    tab.[name] as table_name, 
    pk.[name] as pk_name,
    col.name as col_name
from 
  sys.tables tab
  left outer join sys.indexes pk on tab.object_id = pk.object_id and pk.is_primary_key = 1
  left join sys.index_columns ic on ic.index_id = pk.index_id and ic.object_id = tab.object_id
  inner join sys.columns col on ic.object_id = col.object_id and ic.column_id = col.column_id
order by schema_name(tab.schema_id),
    tab.[name]
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen