Obtener las claves foráneas de una tabla en SQL Server

La siguiente consulta SQL permite obtener el nombre de todos los campos de una tabla que hacen referencia a índices de tablas externas (lo que conocemos como foreign keys o claves foráneas).

SELECT SYSCOLUMNS.name as field
FROM SYSCOLUMNS
INNER JOIN SYSOBJECTS ON SYSOBJECTS.ID = SYSCOLUMNS.ID
WHERE SYSOBJECTS.name = '$vTable'
and SYSCOLUMNS.xtype = '56'
and SYSCOLUMNS.name <> '$vIndex’;

En SQL Server el valor que corresponde a las claves foráneas en la tabla SYSCOLUMNS en el campo xtype es el 56.

Pero este valor también corresponde a la clave primaria es por ello que en la consulta anterior agrego SYSCOLUMNS.name <> '$vIndex’ donde vIndex es el nombre del campo que es clave primaria.

Adicionalmente podemos agregar en esta consulta que nos muestre o no los valores que pueden ser o no nulos, para ello solo debemos agregar en el WHERE la siguiente comprobación and SYSCOLUMNS.isnullable = ‘’ (1 para los que puedan ser nulos y 0 para los que no).

Comentarios

sin otra cosa que hacer ha dicho que…
Estás hiperactivo!!! ... Todo esto que estás contando en los últimos post está muy relacionado con lo que yo hice de PFC y que no era otra cosa que un intento (si digo prototipo queda más profesional) de aplicación de acceso a datos "universal" ...
Y a su vez está relacionado con lo que cierto ex-compañero de trabajo quiso instaurar en su día ... no se en que se habrá quedado todo eso...

Saludos!
Reynier ha dicho que…
ya me gustaría haberlo instaurado pero al final todo se ha quedado archivado y estos son códigos antiguos que he ido sacando para darle un poco de vidilla al blog, pero del PFC nada de nada xD
Reynier ha dicho que…
gracias a esa idea tuya hay muchas cosas re utilizables que he hecho pero nada global, cada aplicación es de un padre y una madre distintos, ya sabes, además el único que utiliza este código soy yo
Unknown ha dicho que…
y si lo que quiero consultar es el nombre de la tabla foránea? es decir tengo una rutina que limpia los datos en orden alfabético de las tablas y me tira un error por que hay algunas tablas que se encuentran mas abajo de ese orden que apuntan a la tabla que quiero limpiar. mi solución es detectar cuales son las tablas foráneas y borrar sus datos primero.
espero haber sido claro y me puedas ayudar