Heidisql: AUTO_INCREMENT не работает на сервере MSSQL

Созданный на 30 окт. 2018  ·  5Комментарии  ·  Источник: HeidiSQL/HeidiSQL

Действия по воспроизведению этой проблемы

  1. Создайте таблицу на SQL-сервере;
  2. Добавьте столбец идентификатора;
  3. Установите для столбца идентификатора автоматическое увеличение, установив по умолчанию значение AUTO_INCREMENT;
  4. Сохраните таблицу. Это может привести к созданию или обновлению таблицы. Это не удается.

Текущее поведение

Он не создает и не изменяет таблицу.
Это дает ошибку в части оператора AUTO_INCREMENT.

Ожидаемое поведение

Он должен создать или обновить таблицу.
Это не должно выдавать ошибку.

Возможное решение

Вместо использования AUTO_INCREMENT SQL-сервер требует IDENTITY(1,1).
Первое число в скобках — начальное значение, второе — приращение.
Пример:
СОЗДАТЬ ТАБЛИЦУ лиц (
ID int IDENTITY(1,1) ПЕРВИЧНЫЙ КЛЮЧ,
Имя varchar(255) НЕ NULL
);

Окружающая обстановка

  • Версия HeidiSQL:
    9.5.0.5315, последняя ночная сборка. На самом деле я хочу использовать не ночную сборку, а стабильную сборку.
  • Система базы данных и версия:
    SQL-сервер, все версии.
  • Операционная система:
    Windows 10 на клиенте, неизвестно на сервере.

Все 5 Комментарий

Это большое изменение? Легко ли будет сделать первый пиар?

У меня та же проблема.
Есть ли решение этой проблемы?

О Боже! Это 2020, и это все еще открыто. Пожалуйста, ребята, исправьте это как можно скорее.
К вашему сведению: я использую HeidiSql v10.3.

Тоже столкнулся с этим сегодня. Одна из единственных причин, по которой мне приходится открывать SSMS :(

Вот скрипт для создания таблицы на MS SQL 12.0.5223.6, который иллюстрирует проблему:

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 не определяет первичный ключ:
image

Вот скрипт, который выбирает индексы первичных ключей в MS SQL (вероятно, не очень ранних версиях 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]
Была ли эта страница полезной?
0 / 5 - 0 рейтинги