Heidisql: AUTO_INCREMENTはMSSQLサーバーでは機能しません

作成日 2018年10月30日  ·  5コメント  ·  ソース: HeidiSQL/HeidiSQL

この問題を再現する手順

  1. SQLサーバー上にテーブルを作成します。
  2. ID列を追加します。
  3. デフォルトをAUTO_INCREMENTに設定して、ID列を自動インクリメントに設定します。
  4. テーブルを保存します。 その結果、テーブルが作成または更新される可能性があります。 これは失敗します。

現在の動作

テーブルを作成または変更することはありません。
ステートメントのAUTO_INCREMENT部分でエラーが発生します。

予想される行動

テーブルを作成または更新する必要があります。
エラーは発生しません。

考えられる解決策

AUTO_INCREMENTを使用する代わりに、SQLサーバーにはIDENTITY(1,1)が必要です。
角かっこで囲まれた最初の数字は開始値で、2番目の数字は増分です。
例:
CREATE TABLE Persons(
ID int IDENTITY(1,1)PRIMARY KEY、
名前varchar(255)NOT NULL
);

環境

  • HeidiSQLバージョン:
    9.5.0.5315、最新のナイトリービルド。 実際、私は実際にはナイトリービルドを使用したくありませんが、安定したビルドを使用したいと思います。
  • データベースシステムとバージョン:
    SQLサーバー、すべてのバージョン。
  • オペレーティング・システム:
    クライアント上のWindows10、サーバー上では不明。

全てのコメント5件

これは大きな変化ですか? 最初のPRは簡単でしょうか?

同じ問題が発生しました。
この問題の解決策はありますか?

なんてこった! それは2020年であり、これはまだ開いています。 お願いします、これをできるだけ早く修正してください。
参考:HeidiSqlv10.3を使用しています

また、今日これに遭遇します。 SSMSを開かなければならない唯一の理由の1つ:(

問題を説明するMSSQL12.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 評価