sql >> データベース >  >> RDS >> Sqlserver

SQL テーブルに主キー列を追加する

    SQL Server 2005 以降では、次のスクリプトを使用できます:

    -- drop PK constraint if it exists
    IF EXISTS (SELECT * FROM sys.key_constraints WHERE type = 'PK' AND parent_object_id = OBJECT_ID('dbo.YourTable') AND Name = 'PK_YourTable')
       ALTER TABLE dbo.YourTable
       DROP CONSTRAINT PK_YourTable
    GO
    
    -- drop column if it already exists
    IF EXISTS (SELECT * FROM sys.columns WHERE Name = 'RowId' AND object_id = OBJECT_ID('dbo.YourTable'))
        ALTER TABLE dbo.YourTable DROP COLUMN RowId
    GO
    
    -- add new "RowId" column, make it IDENTITY (= auto-incrementing)
    ALTER TABLE dbo.YourTable 
    ADD RowId INT IDENTITY(1,1)
    GO
    
    -- add new primary key constraint on new column   
    ALTER TABLE dbo.YourTable 
    ADD CONSTRAINT PK_YourTable
    PRIMARY KEY CLUSTERED (RowId)
    GO
    

    もちろん、他のテーブルがこの dbo.YourTable を参照している場合、このスクリプトは失敗する可能性があります。 既存の RowId に外部キー制約を使用する 列...

    更新: そしてもちろんdbo.YourTable を使用する場所ならどこでも または PK_YourTable 、これらのプレースホルダーを 実際の に置き換える必要があります 独自のデータベースからのテーブル/制約名 (質問では、それらが何であるかについて言及していませんでした.....)



    1. ネイティブクエリとしてHibernateマッピングを使用して不完全なオブジェクトをフェッチする

    2. pip install mysqlclientは致命的なエラーを返しますC1083:ファイルを開くことができません:'mysql.h':そのようなファイルまたはディレクトリはありません

    3. EntityFrameworkで動的な列名で並べ替える方法は?

    4. OracleでTIMESTAMP列をTIMESTAMPWITHTIMEZONEに更新する方法