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

SQL Server 列から ID を削除する方法

    SQL Server 2005 以降を使用している場合は、単純なメタデータの変更としてこれを行うことができます (注:できません)。 最初に述べたように、パーティショニングをサポートするエディションが必要です)。

    この Microsoft Connect アイテム .

    USE tempdb;
    GO
    -- A table with an identity column
    CREATE TABLE dbo.Source 
    (row_id INTEGER IDENTITY PRIMARY KEY NOT NULL, data SQL_VARIANT NULL);
    GO
    -- Some sample data
    INSERT dbo.Source (data)
    VALUES (CONVERT(SQL_VARIANT, 4)),
            (CONVERT(SQL_VARIANT, 'X')),
            (CONVERT(SQL_VARIANT, {d '2009-11-07'})),
            (CONVERT(SQL_VARIANT, N'áéíóú'));
    GO
    -- Remove the identity property
    BEGIN TRY;
        -- All or nothing
        BEGIN TRANSACTION;
    
        -- A table with the same structure as the one with the identity column,
        -- but without the identity property
        CREATE TABLE dbo.Destination 
        (row_id INTEGER PRIMARY KEY NOT NULL, data SQL_VARIANT NULL);
    
        -- Metadata switch
        ALTER TABLE dbo.Source SWITCH TO dbo.Destination;
    
        -- Drop the old object, which now contains no data
        DROP TABLE dbo.Source;
    
        -- Rename the new object to make it look like the old one
        EXECUTE sp_rename N'dbo.Destination', N'Source', 'OBJECT';
    
        -- Success
        COMMIT TRANSACTION;
    END TRY
    BEGIN CATCH
        -- Bugger!
        IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
        PRINT ERROR_MESSAGE();
    END CATCH;
    GO
    
    -- Test the the identity property has indeed gone
    INSERT dbo.Source (row_id, data)
    VALUES (5, CONVERT(SQL_VARIANT, N'This works!'))
    
    SELECT row_id,
            data
    FROM    dbo.Source;
    GO
    
    -- Tidy up
    DROP TABLE dbo.Source;
    


    1. マージ結合連結によるソートの回避

    2. PHPを使用して複数選択ドロップダウンからデータを取得してMySQLに挿入する

    3. EXPORT AS INSERT STATEMENTS:しかし、SQL Plusでは、行は2500文字を上書きします!

    4. 同じテーブルを 2 回参照しているため、View に CLUSTERED INDEX を作成できません。回避策はありますか?