Heidisql: AUTO_INCREMENT 在 MSSQL 服务器上不起作用

创建于 2018-10-30  ·  5评论  ·  资料来源: HeidiSQL/HeidiSQL

重现此问题的步骤

  1. 在 SQL 服务器上创建表;
  2. 添加一个ID列;
  3. 通过将默认值设置为 AUTO_INCREMENT 将 ID 列设置为自动递增;
  4. 保存表。 它可能会导致创建或更新表。 这失败了。

当前行为

它不会创建或修改表。
它在语句的 AUTO_INCREMENT 部分给出错误。

预期行为

它应该创建或更新表。
它不应该给出错误。

可能的解决方案

SQL 服务器不需要使用 AUTO_INCREMENT,而是需要 IDENTITY(1,1)。
括号中的第一个数字是起始值,第二个是增量。
例子:
创建表人员(
ID int IDENTITY(1,1) 主键,
名称 varchar(255) NOT NULL
);

环境

  • HeidiSQL 版本:
    9.5.0.5315,最新的夜间版本。 实际上,我实际上并不想使用每晚构建,而是使用稳定构建。
  • 数据库系统和版本:
    SQL 服务器,所有版本。
  • 操作系统:
    客户端上的 Windows 10,服务器上的未知。

所有5条评论

这是一个很大的变化吗? 第一次PR容易吗?

我遇到了同样的问题。
这个问题有解决方案吗?

天啊! 现在是 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 等级