Home Forums SQL Server 2008 T-SQL (SS2K8) Performing a ALTER TABLE then modifying data in same transaction scope? RE: Performing a ALTER TABLE then modifying data in same transaction scope?

  • I just set up this test harness:

    CREATE TABLE dbo.tbl (ID INT, A BIT, B BIT, C BIT);

    GO

    ALTER TABLE dbo.tbl ADD CONSTRAINT DF_tbl_A DEFAULT(0) FOR A;

    ALTER TABLE dbo.tbl ADD CONSTRAINT DF_tbl_B DEFAULT(0) FOR B;

    ALTER TABLE dbo.tbl ADD CONSTRAINT DF_tbl_C DEFAULT(0) FOR C;

    GO

    INSERT INTO dbo.tbl

    (ID, A, B, C)

    VALUES (1, 1, 1, 1),

    (2, 0, 0, 0);

    GO

    SET XACT_ABORT ON;

    BEGIN TRANSACTION;

    CREATE TABLE #tmp

    (ID INT,

    A BIT NOT NULL,

    B BIT NOT NULL,

    C BIT NOT NULL);

    INSERT INTO #tmp

    (ID, A, B, C)

    SELECT ID,

    A,

    B,

    C

    FROM dbo.tbl;

    ALTER TABLE dbo.tbl

    DROP CONSTRAINT DF_tbl_A,

    DF_tbl_B,

    DF_tbl_C;

    ALTER TABLE dbo.tbl

    ALTER COLUMN A DATETIME NULL;

    GO

    ALTER TABLE dbo.tbl

    ALTER COLUMN B DATETIME NULL;

    GO

    ALTER TABLE dbo.tbl

    ALTER COLUMN C DATETIME NULL;

    GO

    UPDATE t

    SET t.A = CASE WHEN x.A = 1 THEN GETDATE()

    ELSE NULL

    END,

    t.B = CASE WHEN x.B = 1 THEN GETDATE()

    ELSE NULL

    END,

    t.C = CASE WHEN x.C = 1 THEN GETDATE()

    ELSE NULL

    END

    FROM dbo.tbl AS t

    INNER JOIN #tmp AS x

    ON t.ID = x.ID;

    DROP TABLE #tmp;

    COMMIT;

    GO

    DROP TABLE dbo.tbl;

    Runs without errors. That means there's something else going on with your table. Possibly a trigger, either DDL or DML. That would be my first suspicion in a case like this.

    If, for example, there's a logging trigger on column C, but not on A or B, with an audit trail being generated by it, that would totally explain what you're running into.

    - Gus "GSquared", RSVP, OODA, MAP, NMVP, FAQ, SAT, SQL, DNA, RNA, UOI, IOU, AM, PM, AD, BC, BCE, USA, UN, CF, ROFL, LOL, ETC
    Property of The Thread

    "Nobody knows the age of the human race, but everyone agrees it's old enough to know better." - Anon