Localizar los primary key de los campos de una tabla con una consulta

17/12/2003 - 10:36 por Alamo | Informe spam
Buenos dias amigos del foro.

Me encuentro desarrollando una aplicación la cual genera un archivo de texto
con todas las sentencias sql necesarias para crear una copia de una base de
datos existente. En este caso las bases de datos son Access.

Me encuentro en el punto de localizar los "primary key" de una tabla dada.

¿Como podría localizar mediante consultas sql cuales son los primary key de
una tabla?

¿Es posible mediante sentencias sql localizar los mismos?

¿Y a la hora de crear los primary key? ¿Puedo utilizar una única sentencia
para insertar todos aquellos campos pertenecientes a la misma tabla que sean
"Primary Key", es decir esto es posible: "CREATE INDEX PRIMARY KEY ON
[TABLA] ([IDCARGA],[CARGA])" ?

Un saludo y gracias,

Alamo.

Preguntas similare

Leer las respuestas

#1 Maximiliano Damian Accotto
17/12/2003 - 14:52 | Informe spam
Hola!! los primary key de una tabla estan en la tabla Sysobjects

select * from sysobjects where parent_obj=object_id('part')
and xtype='pk'

este ejemplo te muestra el primary de la tabla Part.

podrias tambien ver otras tablas como por ej:

Sysindexes
Sysindexkeys

Un saludo

Maximiliano Damian Accotto
"Alamo" escribió en el mensaje
news:
Buenos dias amigos del foro.

Me encuentro desarrollando una aplicación la cual genera un archivo de


texto
con todas las sentencias sql necesarias para crear una copia de una base


de
datos existente. En este caso las bases de datos son Access.

Me encuentro en el punto de localizar los "primary key" de una tabla dada.

¿Como podría localizar mediante consultas sql cuales son los primary key


de
una tabla?

¿Es posible mediante sentencias sql localizar los mismos?

¿Y a la hora de crear los primary key? ¿Puedo utilizar una única sentencia
para insertar todos aquellos campos pertenecientes a la misma tabla que


sean
"Primary Key", es decir esto es posible: "CREATE INDEX PRIMARY KEY ON
[TABLA] ([IDCARGA],[CARGA])" ?

Un saludo y gracias,

Alamo.




Respuesta Responder a este mensaje
#2 Claudio Molina P.
17/12/2003 - 21:38 | Informe spam
Te envío un query en el que estpy trabajando,
estudialo un poco y verás como documentar varias cosas de
tus tablas de una base de datos cualquiera.


Saludos
Claudio Molina P.




SELECT
o.[name] AS [Nombre Tabla],
CASE WHEN p.[value] IS NULL THEN 'N/A' ELSE p.[value]
END AS [Descripcion Tabla],
o.crdate AS [Fecha Creacion]
FROM
dbo.sysobjects AS o
LEFT OUTER JOIN
dbo.sysproperties AS p
ON
o.[Id] = p.[id]
AND p.[smallId] = 0
WHERE
o.xtype = 'U'
AND o.[name] <> 'dtproperties'
ORDER BY
o.[name]

DATOS
SELECT
o.[Name] AS [Nombre Tabla],
c.[Name] AS [Nombre Campo],
c.colorder AS [Orden Campo],
CASE WHEN p.[value] IS NULL THEN 'N/A' ELSE p.[value]
END AS [Descripcion Campo],
CASE c.xtype
WHEN 34 THEN 'Imagen'
WHEN 35 THEN 'Text'
WHEN 36 THEN 'UniqueIdentifier'
WHEN 48 THEN 'TinyInt'
WHEN 52 THEN 'SmallInt'
WHEN 56 THEN 'Integer'
WHEN 58 THEN 'SmallDateTime'
WHEN 59 THEN 'Real'
WHEN 60 THEN 'Money'
WHEN 61 THEN 'DateTime'
WHEN 62 THEN 'Float'
WHEN 98 THEN 'Sql_Variant'
WHEN 99 THEN 'NText'
WHEN 104 THEN 'Bit'
WHEN 106 THEN 'Decimal(' + convert(varchar,c.xprec)
+ ',' + convert(varchar,c.xscale) + ')'
WHEN 108 THEN 'Numeric(' + convert(varchar,c.xprec)
+ ',' + convert(varchar,c.xscale) + ')'
WHEN 122 THEN 'SmallMoney'
WHEN 127 THEN 'BigInt'
WHEN 165 THEN 'VarBinary(' + convert
(varchar,c.length) + ')'
WHEN 167 THEN 'VarChar(' + convert(varchar,c.length)
+ ')'
WHEN 173 THEN 'Binary(' + convert(varchar,c.length)
+ ')'
WHEN 175 THEN 'Char(' + convert(varchar,c.length)
+ ')'
WHEN 189 THEN 'TimeStamp'
WHEN 231 THEN 'NVarChar(' + convert
(varchar,c.length/2) + ')'
WHEN 239 THEN 'NChar(' + convert(varchar,c.length/2)
+ ')'
ELSE
'XT (' +
convert(varchar, c.xtype) + ') L(' +
convert(varchar, c.length) + ') P(' +
convert(varchar, c.xprec) + ') E(' +
convert(varchar, c.xscale) + ')'
END AS [Tipo],
CASE WHEN c.autoval IS NULL THEN 'NO' ELSE 'SI' END AS
AutoIncremental,
CASE WHEN c.iscomputed = 0 THEN 'NO' ELSE 'SI' END AS
[Campo Calculado],
CASE
WHEN EXISTS (
SELECT
po1.[Name] AS [Table Name],
pi.[Name] AS [Index Name],
pc.[Name] AS [Column Name],
pik.keyno
FROM
dbo.sysindexkeys AS pik
INNER JOIN
dbo.sysindexes AS pi
ON
pik.Id = pi.Id
INNER JOIN
dbo.sysobjects AS po
ON
pi.Name = po.Name
INNER JOIN
dbo.sysobjects AS po1
ON
po.parent_obj = po1.[id]
INNER JOIN
dbo.syscolumns AS pc
ON
po.parent_obj = pc.[Id]
AND pik.colid = pc.[ColId]
WHERE
o.[Name] = po1.[Name]
AND c.[Name] = pc.[Name] ) THEN 'PK'
ELSE ' ' END AS [Key]
FROM
dbo.syscolumns AS c
INNER JOIN
dbo.sysobjects AS o
ON
c.[Id] = o.[Id]
LEFT OUTER JOIN
dbo.sysproperties AS p
ON
c.[Id] = p.[id]
AND c.[ColId] = p.[smallId]
WHERE
o.xType = 'U'
AND o.[name] <> 'dtproperties'
ORDER BY
o.[Name],
c.colorder



Buenos dias amigos del foro.

Me encuentro desarrollando una aplicación la cual genera


un archivo de texto
con todas las sentencias sql necesarias para crear una


copia de una base de
datos existente. En este caso las bases de datos son


Access.

Me encuentro en el punto de localizar los "primary key"


de una tabla dada.

¿Como podría localizar mediante consultas sql cuales son


los primary key de
una tabla?

¿Es posible mediante sentencias sql localizar los mismos?

¿Y a la hora de crear los primary key? ¿Puedo utilizar


una única sentencia
para insertar todos aquellos campos pertenecientes a la


misma tabla que sean
"Primary Key", es decir esto es posible: "CREATE INDEX


PRIMARY KEY ON
[TABLA] ([IDCARGA],[CARGA])" ?

Un saludo y gracias,

Alamo.




.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida