Ir al contenido


Foto

drop primary key sin saber el nombre


  • Por favor identifícate para responder
2 respuestas en este tema

#1 Pratasvenska

Pratasvenska

    Member

  • Miembros
  • PipPip
  • 38 mensajes
  • LocationSuecia

Escrito 12 diciembre 2011 - 04:14

Que tal amigos, existe alguna forma de eliminar una llave primaria sin saber el nombre de antemano?

Saludos.
  • 0

#2 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 12 diciembre 2011 - 08:56

Todos los motores SQL, por tener que cumplir el estandar, han de ser capaces de darte la estructura completa de las tablas de una base de datos usando querys en SQL normales, solo que en cada motor la sintaxis es distinta.

En SQL Server tienes las definiciones que necesitas aqui: http://msdn.microsof...y/ms173810.aspx

Otra cosa es que te permita hacerle un drop, normalmente esas columnas estan asociada a indices, relaciones con otras tablas, etc., y sin romper antes todas esas relaciones, te dirá educadamente que no pudo hacerle drop por violarse esas relaciones, que por cierto están definidas en las mismas tablas que antes.
  • 0

#3 Pratasvenska

Pratasvenska

    Member

  • Miembros
  • PipPip
  • 38 mensajes
  • LocationSuecia

Escrito 13 diciembre 2011 - 02:39

Es una tabla en la que yo mismo he creado las relaciones y de la cual conozco muy bien la estructura. Puedo hacer un drop constraint perfectamente:
ALTER TABLE Tabla
DROP CONSTRAINT PK_Tabla_Col1


El problema es en mi empresa tenemos un "model editor" (un programita que se han creado aqui para crear automaticamente las tablas). Por lo tanto no puedo saber el nombre que les asigna a las llaves primarias a menos que lo vea manualmente con un query. Ahora, desde delphi necesito modificar dichas llaves primarias.

En resumen, la estructura no es el problema.  A fin de cuentas, lo encontré por ahi en internet.
CREATE TABLE PKTest ( ID INT PRIMARY KEY ) ;

DECLARE @SQL VARCHAR(4000)
SET @SQL = 'ALTER TABLE PKTEST DROP CONSTRAINT |ConstraintName| '

SET @SQL = REPLACE(@SQL, '|ConstraintName|', ( SELECT  name
                                              FROM    sysobjects
                                              WHERE    xtype = 'PK'
                                                        AND parent_obj = OBJECT_ID('PKTest')
                                            ))

EXEC (@SQL)

DROP TABLE PKTest


saludos
  • 0




IP.Board spam blocked by CleanTalk.