テーブルの主キーを ID 列に変更する必要がありますが、テーブルにはすでにいくつかの行があります。
ID をクリーンアップして、1 から始まる連続番号であることを確認するスクリプトがあり、テスト データベースでは正常に動作します。
列を変更して ID プロパティを持たせる SQL コマンドは何ですか?
ベストアンサー1
ID の既存の列を変更することはできません。
2つの選択肢があります。
ID を持つ新しいテーブルを作成し、既存のテーブルを削除します
IDを持つ新しい列を作成し、既存の列を削除します
アプローチ 1. (新しいテーブル) ここでは、新しく作成された ID 列の既存のデータ値を保持できます。「if not exists」が満たされない場合はすべてのデータが失われることに注意してください。そのため、ドロップにも条件を設定するようにしてください。
CREATE TABLE dbo.Tmp_Names
(
Id int NOT NULL
IDENTITY(1, 1),
Name varchar(50) NULL
)
ON [PRIMARY]
go
SET IDENTITY_INSERT dbo.Tmp_Names ON
go
IF EXISTS ( SELECT *
FROM dbo.Names )
INSERT INTO dbo.Tmp_Names ( Id, Name )
SELECT Id,
Name
FROM dbo.Names TABLOCKX
go
SET IDENTITY_INSERT dbo.Tmp_Names OFF
go
DROP TABLE dbo.Names
go
Exec sp_rename 'Tmp_Names', 'Names'
アプローチ 2 (新しい列) 新しく作成された ID 列に既存のデータ値を保持することはできません。ID 列には、一連の番号が保持されます。
Alter Table Names
Add Id_new Int Identity(1, 1)
Go
Alter Table Names Drop Column ID
Go
Exec sp_rename 'Names.Id_new', 'ID', 'Column'
詳細については、次の Microsoft SQL Server フォーラムの投稿を参照してください。