Saber si es Primary Key dos campos al mismo tiempo

02/06/2006 - 18:24 por Augusto | Informe spam
Logre esto desde una respuesta dada por otro del grupo anteriormente
pero de forma individual, abra una forma de saber si los dos campos
(strTipoDoc, strNumeroDoc) al mismo tiempo son clave primaria de la
tabla (tblClientes)????


SELECT CASE OBJECTPROPERTY ( OBJECT_ID ( CONSTRAINT_NAME ) ,
'IsPrimaryKey' ) WHEN 1 THEN 'SI' ELSE 'NO' END AS CLAVE_PRIMARIA
from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
where (TABLE_NAME = 'tblClientes' AND COLUMN_NAME = 'strTipoDoc')
and CONSTRAINT_NAME like 'PK_%'


SELECT CASE OBJECTPROPERTY ( OBJECT_ID ( CONSTRAINT_NAME ) ,
'IsPrimaryKey' ) WHEN 1 THEN 'SI' ELSE 'NO' END AS CLAVE_PRIMARIA
from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
where (TABLE_NAME = 'tblClientes' AND COLUMN_NAME = 'strNumeroDoc')
and CONSTRAINT_NAME like 'PK_%'


Gracias
 

Leer las respuestas

#1 Jorge Gonzalez
03/06/2006 - 00:21 | Informe spam
Estimado Augusto

Hay varias maneras de hacer lo que querés, si es que lo he entendido
bien
ahora, no sé si la que sigue sea la más eficiente, pero trabaja.

select case when count(*) is not null then 'SI' else 'NO' end
from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
where
Table_Name = 'titleauthor' and
column_name in ('au_id', 'title_id') and
OBJECTPROPERTY ( OBJECT_ID ( CONSTRAINT_NAME ) , 'IsPrimaryKey' ) =1
having count (*) = 2

Este ejemplo trabaja con la base de datos pubs que viene con SQL Server
2000.
Nota que las columnas en la clausula WHERE están dentro de un IN y que
además se incluye
una clausula HAVING count(*) =2. Ese 2 se corresponde con el número de
columnas que hay
dentro del IN de manera que esta consulta te funcionará para cualquier No.
de columnas en una llave
primaria siempre y cuando incluyas todas sus columnas en el IN y luego en #
de columnas en el count.

En cuanto a tu consulta no te recomiendo que bases que WHERE en el nombre
del constraint ya que
no tenés garantía de que el nombre de un constraint de llave primaria
inicie PK_, así que ojo con eso.

saludos

Jorge González



"Augusto" escribió en el mensaje
news:
Logre esto desde una respuesta dada por otro del grupo anteriormente
pero de forma individual, abra una forma de saber si los dos campos
(strTipoDoc, strNumeroDoc) al mismo tiempo son clave primaria de la
tabla (tblClientes)????


SELECT CASE OBJECTPROPERTY ( OBJECT_ID ( CONSTRAINT_NAME ) ,
'IsPrimaryKey' ) WHEN 1 THEN 'SI' ELSE 'NO' END AS CLAVE_PRIMARIA
from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
where (TABLE_NAME = 'tblClientes' AND COLUMN_NAME = 'strTipoDoc')
and CONSTRAINT_NAME like 'PK_%'


SELECT CASE OBJECTPROPERTY ( OBJECT_ID ( CONSTRAINT_NAME ) ,
'IsPrimaryKey' ) WHEN 1 THEN 'SI' ELSE 'NO' END AS CLAVE_PRIMARIA
from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
where (TABLE_NAME = 'tblClientes' AND COLUMN_NAME = 'strNumeroDoc')
and CONSTRAINT_NAME like 'PK_%'


Gracias

Preguntas similares