2009-09-17 26 views

Respuesta

2

Creo que encontrará que no hay una manera fácil de eliminar las restricciones en una tabla en SQL Server 2000. Dicho esto, hay muchas personas que han escrito scripts que pueden identificar y eliminar/deshabilitar/recrear la clave externa restricciones Un ejemplo es el http://www.mssqltips.com/tip.asp?tip=1376, pero no lo he probado en SQL Server 2000.

EDITAR: Aquí hay otro example que genera secuencias de comandos drop/create para usted.

13

Si simplemente deshabilitar restricciones es una opción aquí, puede utilizar:

ALTER TABLE myTable NOCHECK CONSTRAINT all 

entonces usted puede cambiar de nuevo en el simple uso:

ALTER TABLE myTable WITH CHECK CHECK CONSTRAINT all 

Si desea desactivar restricciones en todas las tablas puede utilizar:

-- disable all constraints 
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all" 

-- enable all constraints 
exec sp_msforeachtable "ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all" 

más en la pregunta: Can foreign key constraints be temporarily disabled using TSQL?

Pero si necesita eliminar las restricciones de manera permanente, puede usar this script posted on databasejurnal.com.

basta con modificar ligeramente para solamente soltar las claves externas

create proc sp_drop_fk_constraints 
    @tablename sysname 
as 
-- credit to: douglas bass 

set nocount on 

declare @constname sysname, 
    @cmd  varchar(1024) 

declare curs_constraints cursor for 
    select name 
    from sysobjects 
    where xtype in ('F') 
    and (status & 64) = 0 
    and  parent_obj = object_id(@tablename) 

open curs_constraints 

fetch next from curs_constraints into @constname 
while (@@fetch_status = 0) 
begin 
    select @cmd = 'ALTER TABLE ' + @tablename + ' DROP CONSTRAINT ' + @constname 
    exec(@cmd) 
    fetch next from curs_constraints into @constname 
end 

close curs_constraints 
deallocate curs_constraints 

return 0 
5

Aquí van: (No probado en SQL2000, sino que debe estar bien)

Genera 'desactiva':

SELECT 'IF EXISTS (SELECT * FROM sys.foreign_keys 
    WHERE object_id = OBJECT_ID(N''[dbo].' + FK +''') 
    AND parent_object_id = OBJECT_ID(N''[dbo].' + PT + ''')) 
    ALTER TABLE ' + PT + ' NOCHECK CONSTRAINT ' + FK + ';' 
FROM 
(SELECT 
    OBJECT_NAME(constraint_object_id) as FK, 
    OBJECT_NAME(parent_object_id) as PT 
    FROM [sys].[foreign_key_columns]) T 
ORDER BY FK 

Genera 'habilita':

SELECT 'ALTER TABLE ' + PT + ' WITH CHECK CHECK CONSTRAINT ' + FK + ';' 
FROM 
(SELECT 
    OBJECT_NAME(constraint_object_id) as FK, 
    OBJECT_NAME(parent_object_id) as PT 
    FROM [sys].[foreign_key_columns]) T 
ORDER BY FK 

Actualización: Ups, pensé que lo querías para todas las tablas :) Solo puedes modificar arriba para tu tabla individual.

+1

Las tablas del sistema son diferentes pero tienen un nombre similar en SQL Server 2000: http://msdn.microsoft.com/en-us/library/aa260604%28v=SQL.80%29.aspx – Emyr

Cuestiones relacionadas