代码之家  ›  专栏  ›  技术社区  ›  REA_ANDREW

有没有一种在开发阶段用脚本快速更改数据库的键和外键的方法?

  •  0
  • REA_ANDREW  · 技术社区  · 17 年前

    在SQL Server中是否有一个快速脚本,我可以使用它将ID从int更改为唯一标识符,而无需实际执行和手动执行。我已经考虑过使用代码生成来实现这一点,但是我认为如果可能的话,使用TSQL将是最快的!

    2 回复  |  直到 17 年前
        1
  •  1
  •   Spence    17 年前

    你可以用脚本来完成。

    ALTER TABLE x ADD COLUMN y uniqueIdentifier null
    GO
    UPDATE TABLE x SET y = NEWID() --Or NEWSEQUENTIALID() if its safe
    GO
    ALTER TABLE x ALTER COLUMN y uniqueIdentifier NOT NULL
    GO
    ALTER TABLE x DROP CONSTRAINT PK_PrimaryKeyConstraintName
    GO
    ALTER TABLE x DROP COLUMN PrimaryKeyColumn
    GO
    ALTER TABLE x ADD CONSTRAINT PK_NewPrimaryKeyConstraint PRIMARY KEY CLUSTERED 
    ( 
        y ASC 
    )
    GO
    

    请注意,这不会处理您的外键约束,并且会中断,如果您有外键约束,这会变得有趣,但我相信您可以看到模式。

        2
  •  0
  •   Dmytrii Nagirniak    17 年前

    我假设唯一标识符是指身份。如果是这种情况,这里是示例脚本:

        BEGIN TRANSACTION
        CREATE TABLE dbo.Tmp_MyTable
            (
            ID int NOT NULL IDENTITY (1, 1)
            )  ON [PRIMARY]
        GO
        SET IDENTITY_INSERT dbo.Tmp_MyTable ON
        GO
        IF EXISTS(SELECT * FROM dbo.MyTable)
             EXEC('INSERT INTO dbo.Tmp_MyTable (ID)
                SELECT ID FROM dbo.MyTable TABLOCKX')
        GO
        SET IDENTITY_INSERT dbo.Tmp_MyTable OFF
        GO
        DROP TABLE dbo.MyTable
        GO
        EXECUTE sp_rename N'dbo.Tmp_MyTable', N'MyTable', 'OBJECT'
        GO
        ALTER TABLE dbo.MyTable ADD CONSTRAINT
            PK_MyTable PRIMARY KEY CLUSTERED 
            (
            ID
            ) ON [PRIMARY]
    
        GO
        COMMIT