• ベストアンサー

SQL文によるシードとインクリメントの変更方法

お世話になります。 既にデータが入力されているテーブルで、identity列のシードとインクリメントをコマンドから変更する事は可能でしょうか? 可能であれば、どのようなSQL文を実行すればよいのでしょうか?(ALTER TABLE?) ご存じの方がいらっしゃいましたら、 教えて頂けませんでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

Visual Studio 2003 でテーブルのデザインを変更中、メニューの [ダイアグラム]-[変更スクリプトの生成] コマンドまたは <テーブル> ツールバーの [変更スクリプトの生成] ボタンをクリックすると <変更スクリプトの保存> ダイアログが表示されます。 その中にスクリプトが表示されています。

nsv1000e
質問者

お礼

教えて頂き、ありがとうごさいました。

その他の回答 (3)

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.3

#2です #2の回答はSQL Server 2000の場合でした。 2005はわかりません

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.2

dbcc checkidentを使用すればシードは簡単に変更できます インクリメントはenterprise managerとかの管理ツールから操作する方法が簡単でしょう SQLで行うにはdefaultを定義している制約名を見つけて再定義、少し面倒くさい方法になります #1の方の方法でもいいですが、外部制約がある場合は気をつけてください。関連削除とかトリガが動作するしないとか、でデータの整合性がきちんと取れているか保障してください

nsv1000e
質問者

お礼

情報提供、ありがとうごさいます。

回答No.1

MSDE2000 の既存テーブルに対して Visual Studio 2003 のデザイナから変更使用としたときに生成されたスクリプトです。 BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION CREATE TABLE dbo.Tmp_testTable ( datID int NOT NULL IDENTITY (10, 2), FName nvarchar(50) NULL, LName nvarchar(50) NULL ) ON [PRIMARY] GO SET IDENTITY_INSERT dbo.Tmp_testTable ON GO IF EXISTS(SELECT * FROM dbo.testTable) EXEC('INSERT INTO dbo.Tmp_testTable (datID, FName, LName) SELECT datID, FName, LName FROM dbo.testTable (HOLDLOCK TABLOCKX)') GO SET IDENTITY_INSERT dbo.Tmp_testTable OFF GO DROP TABLE dbo.testTable GO EXECUTE sp_rename N'dbo.Tmp_testTable', N'testTable', 'OBJECT' GO ALTER TABLE dbo.testTable ADD CONSTRAINT PK_testTable PRIMARY KEY CLUSTERED ( datID ) ON [PRIMARY] GO COMMIT 新規テーブルを別名で作成して旧テーブルからデータを移動。 旧テーブルを削除。 新規テーブルの名前を旧テーブルと同じ名前に変更。

nsv1000e
質問者

お礼

どうも、ありがとうございます。 意外と複雑なんですね。 よろしければ、VisualStudioから変更した時、内部で生成される?スクリプトの取得方法を教えて頂けませんでしょうか。

関連するQ&A