- ベストアンサー
SQL文によるシードとインクリメントの変更方法
お世話になります。 既にデータが入力されているテーブルで、identity列のシードとインクリメントをコマンドから変更する事は可能でしょうか? 可能であれば、どのようなSQL文を実行すればよいのでしょうか?(ALTER TABLE?) ご存じの方がいらっしゃいましたら、 教えて頂けませんでしょうか? よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Visual Studio 2003 でテーブルのデザインを変更中、メニューの [ダイアグラム]-[変更スクリプトの生成] コマンドまたは <テーブル> ツールバーの [変更スクリプトの生成] ボタンをクリックすると <変更スクリプトの保存> ダイアログが表示されます。 その中にスクリプトが表示されています。
その他の回答 (3)
- 7marine
- ベストアンサー率36% (59/160)
#2です #2の回答はSQL Server 2000の場合でした。 2005はわかりません
- 7marine
- ベストアンサー率36% (59/160)
dbcc checkidentを使用すればシードは簡単に変更できます インクリメントはenterprise managerとかの管理ツールから操作する方法が簡単でしょう SQLで行うにはdefaultを定義している制約名を見つけて再定義、少し面倒くさい方法になります #1の方の方法でもいいですが、外部制約がある場合は気をつけてください。関連削除とかトリガが動作するしないとか、でデータの整合性がきちんと取れているか保障してください
お礼
情報提供、ありがとうごさいます。
- temtecomai2
- ベストアンサー率61% (656/1071)
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 新規テーブルを別名で作成して旧テーブルからデータを移動。 旧テーブルを削除。 新規テーブルの名前を旧テーブルと同じ名前に変更。
お礼
どうも、ありがとうございます。 意外と複雑なんですね。 よろしければ、VisualStudioから変更した時、内部で生成される?スクリプトの取得方法を教えて頂けませんでしょうか。
お礼
教えて頂き、ありがとうごさいました。