2016-10-10 6 views
0

Companyという名前のデータベースとEmployeesTDというテーブルを作成し、EmployeeID行に自動インクリメントを追加するのを忘れました。自動増分を追加するにはテーブルを更新するにはどうすればいいですか?SQLの更新/変更または挿入?

+0

を使用して別のアプローチ、テーブル内のすべてのデータがありますか? – VDK

+1

私は列を落として、それをアイデンティティとして再追加して、自動的に移入させることができると信じています。 – Igor

答えて

0

1)それは元の名前だとインクリメントフィールド )新しいテーブルに、古いテーブルからすべてのデータを移動します(使用してIDENTITY_INSERT)

3)は、古いテーブル

4)新しいテーブルの名前を変更するドロップ

(インデックスがある場合は、インデックスを追加することを忘れないでください)あなたは、不要なインデックスの再構築を避けるために行う場合は、後でそれらを追加します。)

0
alter table t1 
add somename int identity(1,1) 

か、他

create table dummytable 
(
id int identity(1,1) 
somecols -- 

) 

insert into dummytable 
select colnames from orginaltable 

テーブル場合は最終的に、私は第二のアプローチとなるだろうインデックスを追加し、元の

にダミーの名前を変更最初の操作がテーブル全体をロックする可能性があるため、大きなデータがあります

0

ALTER TABLEクエリ

ALTER TABLE EmployeesTD ADD id INT IDENTITY(1,1) 

あなたはEmployeesTDテーブル内のレコードを持っている場合でも、上記のステートメントは、各行に対して一意の値を移入します

Identity機能

-- 1. create a temporary table 
SELECT IDENTITY(int, 1, 1) AS id, 
     * 
INTO temp_EmployeesTD 
FROM EmployeesTD 

-- 2. drop the orginal table 
DROP TABLE EmployeesTD 

-- 3. rename the temporary table to orginal table 
EXEC Sp_rename 
    'temp_EmployeesTD', 
    'EmployeesTD' 

-- 4. Recreate the indexes if any 
0
ALTER TABLE Table_name MODIFY COLUMN col_name INT auto_increment