3

ID 1 の列 ID を持つテーブルがあります。次に、新しい非 ID 列 new_ID を作成し、ID 列 + 1 の値で更新します。次のようにします。

new_ID = ID + 1

次に、ID 列を削除し、new_ID の名前を「ID」に変更します。

そして、この新しい列「ID」にアイデンティティを設定する方法は?

これをプログラムで実現したい!

4

5 に答える 5

5

私の知る限り、IDENTITY として作成された ID フィールドを持つ一時テーブルを作成し、元のテーブルからすべてのデータをコピーする必要があります。最後に、元のテーブルを削除し、一時テーブルの名前を変更します。これは、ID (整数、非 IDENTITY) という名前のフィールドを 1 つだけ含むテーブル (名前はTestTable ) の例です。

BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_TestTable
    (
    ID int NOT NULL IDENTITY (1, 1)
    )  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_TestTable ON
GO
IF EXISTS(SELECT * FROM dbo.TestTable)
     EXEC('INSERT INTO dbo.Tmp_TestTable (ID)
        SELECT ID FROM dbo.TestTable WITH (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
COMMIT
于 2009-04-16T14:35:09.940 に答える
2

SQL Mobile は列 ID の変更をサポートしているように見えますが、SQL Server 2005 では BOL の例が気に入りませんでした。

したがって、オプションは、ID 列を含む新しい一時テーブルを作成してから、ID 挿入をオンにすることです。

Create Table Tmp_MyTable ( Id int identity....)

SET IDENTITY_INSERT dbo.Tmp_Category ON

INSERT Into Tmp_MyTable (...)
Select From MyTable ....

Drop Table myTable

EXECUTE sp_rename N'dbo.Tmp_MyTable', N'MyTable', 'OBJECT' 

さらに、最初に列をID列として追加してから、ID挿入をオンにすることができます。次に、元の列をドロップします。しかし、これが機能するかどうかはわかりません。

于 2009-04-16T14:37:31.947 に答える
1

あなたの仕事はあまり運がなかったと思います....

テーブルの設計では、プロパティに移動し、ID 仕様の変更 (Is Identity) ではいに変更し、以前に主キーがあった場合は列の主キーを割り当てることができるはずです。

于 2009-04-16T14:33:52.907 に答える
1

SqlServerCentral.com から

非 IDENTITY から IDENTITY への変更、およびその逆の変更

于 2009-04-17T05:28:03.277 に答える
0

ID は、テーブルが作成されたとき、またはテーブル変更ステートメントで新しい列が追加されたときに設定されるプロパティです。列を変更して ID に設定することはできず、同じテーブル内に ID 列を 2 つ持つことはできません。

テーブルのサイズによっては、単純にテーブルを新規作成することは可能ですか? 古いもののスキーマをコピーしてから、SET IDENTITY_INSERT ON を使用して、新しい ID 列に古いものから必要なものを入力します。

于 2009-04-16T14:37:07.017 に答える