Si, es exactamente lo que necesitaba.

Muchísimas Gracias Pablo.

Saludos!

 

 

De: [email protected] [mailto:[email protected]] En nombre de Pablo Rausch
Enviado el: miércoles, 03 de diciembre de 2014 15:28
Para: [email protected]
Asunto: [puntonet] Dropear Constraints Dinamicamente

 

Espero que te sirva.

 

CREATE PROCEDURE [dbo].[DropConstraints] @tablename nvarchar(500), @columnname 
nvarchar(500)

AS

 

SELECT CONSTRAINT_NAME, 'C' AS type

INTO #dependencies

FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME = @tablename 
AND COLUMN_NAME = @columnname

 

INSERT INTO #dependencies

select d.name, 'C'

from sys.default_constraints d

join sys.columns c ON c.column_id = d.parent_column_id AND c.object_id = 
d.parent_object_id

join sys.objects o ON o.object_id = d.parent_object_id

WHERE o.name = @tablename AND c.name = @columnname

 

INSERT INTO #dependencies

SELECT i.name, 'I'

FROM sys.indexes i

JOIN sys.index_columns ic ON ic.index_id = i.index_id and 
ic.object_id=i.object_id

JOIN sys.columns c ON c.column_id = ic.column_id and c.object_id=i.object_id

JOIN sys.objects o ON o.object_id = i.object_id

where o.name = @tableName AND i.type=2 AND c.name = @columnname AND 
is_unique_constraint = 0

 

DECLARE @dep_name nvarchar(500)

DECLARE @type nchar(1)

 

DECLARE dep_cursor CURSOR

FOR SELECT * FROM #dependencies

 

OPEN dep_cursor

 

FETCH NEXT FROM dep_cursor 

INTO @dep_name, @type;

 

DECLARE @sql nvarchar(max)

 

WHILE @@FETCH_STATUS = 0

BEGIN

    SET @sql = 

        CASE @type

            WHEN 'C' THEN 'ALTER TABLE [' + @tablename + '] DROP CONSTRAINT [' 
+ @dep_name + ']'

            WHEN 'I' THEN 'DROP INDEX [' + @dep_name + '] ON dbo.[' + 
@tablename + ']'

        END

    print @sql

    EXEC sp_executesql @sql

    FETCH NEXT FROM dep_cursor 

    INTO @dep_name, @type;

END

 

DEALLOCATE dep_cursor

 

DROP TABLE #dependencies

 

Saludos




Pablo I. Rausch

[email protected]

 

El 3 de diciembre de 2014, 10:56, Info (Sinergia Software Soluciones) 
<[email protected]> escribió:

Hola Gente,

 

Buenos Días!

 

Los contacto para obtener una ayudita.

 

Necesito hacer un proceso que DROPEE automáticamente las contrainst de una 
tabla (Clientes) porque hay que cambiar el PK.

 

El proceso de agregado de la nueva PK en las tablas hijas y el reemplazo no es 
un problema, pero si el dropeo porque es un proceso a ejecutar en distintas 
bases y los FK podrían tener distintos nombres.

 

Muchas Gracias.

 

Saludos…

 

                               Augusto

 

 

Responder a