に重複するキーを挿入することはできません:PRIMARY KEY制約違反。私はそうのように作成された主キー制約を持つテーブルを持っているオブジェクト
CONSTRAINT [APP_NOTIFICATION_LOG_PK] 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]
私は今削除したテーブル内のレコードをいくつか持っていました。
私は手動で次のIDがそうのように挿入するために見つける:
SELECT @maxid_log = max(ID) + 1 FROM APP_NOTIFICATION_LOG;
そして、私はレコードを挿入しよう:この段階で
INSERT INTO [dbo].[APP_NOTIFICATION_LOG]([ID],[COLOR],[ACTIVE],[FK_SYS_USERS_ID],[FK_APP_NOTIFICATIONS_ID], [MESSAGE],[WIN_USER_CREATOR], [FK_JOBR_RESOURCE_ID])
SELECT -- log notification created
@maxid_log,
anc.COLOR,
1,
anc.[FK_SYS_USERS_ID],
an.id,
'Notification cancelled!',
@creatorUserId,
@jobrResourceDbId
FROM [dbo].[APP_NOTIFICATIONS] an
INNER JOIN [dbo].[APP_NOTIFICATION_CONFIG] anc on anc.id = @configId
WHERE an.[FK_JOBR_RESOURCE_ID] = @jobrResourceDbId
はタイトルにエラーが発生します。それはまた、値5は公約であると言います。しかし、選択を実行している:
SELECT * FROM APP_NOTIFICATION_LOG WHERE ID = 5
は...ゼロのレコードを返します。
ここで問題が発生する可能性がありますか?
複数のセッションが同時にSQLを実行する(または挿入に複数の行がある)場合、 'select max()+ 1'は安全ではないというIDENTITYカラムを使用してください。 –
注目。それに応じてスクリプトを更新します。 –