none
Alter column identity RRS feed

  • Pregunta

  • hola a todos, tengo un campo de un tabla, esta tavbla ya tiene datos, y necesito agregar a un campo el atributo identity, ya actualice para q el pruimer valor sea uno y se incremente de a uno, para q los valores no sean unicos, ahora la rpegunta es, como hago el alter?, lo hice y me marca error:

    ALTER TABLE HC_ALM_TRIAGEcb
        ALTER COLUMN consecutivo FLOAT IDENTITY(1,1)

    el error es:Sintaxis incorrecta cerca de la palabra clave 'IDENTITY'.

    Gracias

    viernes, 19 de marzo de 2010 22:32

Respuestas

  • Hola.

    No se puede. Deberás reconstruir la tabla para hacerlo. Una forma de conseguirlo es usando Management Studio (que reconstruye la tabla). Te paso un script de ese tipo:

    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Tabla
    	(
    	campo1 int NOT NULL IDENTITY (1, 2),
    	campo2 nchar(10) NULL
    	)  ON [PRIMARY]
    GO
    COMMIT
    
    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Tmp_Tabla
    	(
    	campo1 int NOT NULL IDENTITY (1, 1),
    	campo2 nchar(10) NULL
    	)  ON [PRIMARY]
    GO
    SET IDENTITY_INSERT dbo.Tmp_Tabla ON
    GO
    IF EXISTS(SELECT * FROM dbo.Tabla)
    	 EXEC('INSERT INTO dbo.Tmp_Tabla (campo1, campo2)
    		SELECT campo1, campo2 FROM dbo.Tabla WITH (HOLDLOCK TABLOCKX)')
    GO
    SET IDENTITY_INSERT dbo.Tmp_Tabla OFF
    GO
    DROP TABLE dbo.Tabla
    GO
    EXECUTE sp_rename N'dbo.Tmp_Tabla', N'Tabla', 'OBJECT' 
    GO
    COMMIT


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    viernes, 19 de marzo de 2010 22:57
    Moderador

Todas las respuestas

  • Hola.

    No se puede. Deberás reconstruir la tabla para hacerlo. Una forma de conseguirlo es usando Management Studio (que reconstruye la tabla). Te paso un script de ese tipo:

    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Tabla
    	(
    	campo1 int NOT NULL IDENTITY (1, 2),
    	campo2 nchar(10) NULL
    	)  ON [PRIMARY]
    GO
    COMMIT
    
    BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    GO
    CREATE TABLE dbo.Tmp_Tabla
    	(
    	campo1 int NOT NULL IDENTITY (1, 1),
    	campo2 nchar(10) NULL
    	)  ON [PRIMARY]
    GO
    SET IDENTITY_INSERT dbo.Tmp_Tabla ON
    GO
    IF EXISTS(SELECT * FROM dbo.Tabla)
    	 EXEC('INSERT INTO dbo.Tmp_Tabla (campo1, campo2)
    		SELECT campo1, campo2 FROM dbo.Tabla WITH (HOLDLOCK TABLOCKX)')
    GO
    SET IDENTITY_INSERT dbo.Tmp_Tabla OFF
    GO
    DROP TABLE dbo.Tabla
    GO
    EXECUTE sp_rename N'dbo.Tmp_Tabla', N'Tabla', 'OBJECT' 
    GO
    COMMIT


    Alberto López Grande (Visita mi blog en http://qwalgrande.blogspot.es/)
    viernes, 19 de marzo de 2010 22:57
    Moderador
  • Hola, gracias por tu respuesta, era lo q necesitaba....
    martes, 23 de marzo de 2010 14:56