Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как узнать поля связки для ForignKey  [new]
Miad
Member

Откуда:
Сообщений: 65
Задача состоит в том, что бы удалить все ForignKey с базы и потом поставить их же обратно.
Заранее неизвестно сколько может быть ключей и на каких таблицах.
Название ForignKey может не соответствовать названию связываемых им таблиц.

Сбросить легко, примерно так:

CREATE PROCEDURE [dbo].[drop_fk_keys]
AS

DECLARE @name VARCHAR(100)
DECLARE @parent_table VARCHAR(100)
DECLARE @query VARCHAR (8000)

DECLARE hFKKeys CURSOR STATIC LOCAL FOR
	SELECT name, object_name(parent_obj) parent_table FROM sysobjects WHERE xtype='F' and name like 'FK_%'
OPEN hFKKeys

FETCH NEXT FROM hFKKeys INTO @name, @parent_table
WHILE 	@@FETCH_STATUS = 0 
	BEGIN
	IF  EXISTS (SELECT * FROM sysobjects WHERE name=@name and    object_name(parent_obj)=@parent_table) 
	  BEGIN
	   set @query='ALTER TABLE dbo.'+@parent_table+' DROP CONSTRAINT '+@name    
	    EXEC ( '' + @query)
           END
	  FETCH NEXT FROM hFKKeys INTO @name, @parent_table
	END	
CLOSE hFKKeys
DEALLOCATE hFKKeys
GO


А что бы восстановить, нужно знать имя двух связываемых таблиц и их колонок.
ALTER TABLE [dbo].[table1]  
WITH NOCHECK ADD  CONSTRAINT [FK_table1_table2] FOREIGN KEY([table1_column1])
REFERENCES [dbo].[table2] ([table1_column2])
GO

Что-то не нашел откуда это можно достать.

Одну таблицу можно достать из:

SELECT *  FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE

а со второй не очень понятно.
1 дек 11, 14:20    [11689530]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать поля связки для ForignKey  [new]
foreign key
Guest
select * from sys.foreign_key_columns
1 дек 11, 14:24    [11689564]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать поля связки для ForignKey  [new]
ZOOKABAKODER
Member

Откуда:
Сообщений: 178
Для разных БД поразному. В SQL >= 9 sys.foreign_keys sys.foreign_key_columns тебе в помощь.
1 дек 11, 14:27    [11689585]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать поля связки для ForignKey  [new]
Miad
Member

Откуда:
Сообщений: 65
ZOOKABAKODER
Для разных БД поразному. В SQL >= 9 sys.foreign_keys sys.foreign_key_columns тебе в помощь.


Спасибо, а для 2000-го какой вариант подойдет?
1 дек 11, 14:33    [11689632]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать поля связки для ForignKey  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Miad
Спасибо, а для 2000-го какой вариант подойдет?
sysreferences
1 дек 11, 14:39    [11689701]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать поля связки для ForignKey  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
Miad
А что бы восстановить, нужно знать имя двух связываемых таблиц и их колонок.
ALTER TABLE [dbo].[table1]  
WITH NOCHECK ADD  CONSTRAINT [FK_table1_table2] FOREIGN KEY([table1_column1])
REFERENCES [dbo].[table2] ([table1_column2])
GO
Только не забудьте, что колонок у одной таблицы может быть много.
1 дек 11, 15:17    [11690098]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать поля связки для ForignKey  [new]
Miad
Member

Откуда:
Сообщений: 65
invm
Miad
Спасибо, а для 2000-го какой вариант подойдет?
sysreferences


Спасибо, помогло.
1 дек 11, 15:21    [11690139]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать поля связки для ForignKey  [new]
Miad
Member

Откуда:
Сообщений: 65
alexeyvg
Только не забудьте, что колонок у одной таблицы может быть много.

Да, важный нюанс.
Вроде 16-ть колонок максимум.
1 дек 11, 15:23    [11690155]     Ответить | Цитировать Сообщить модератору
 Re: Как узнать поля связки для ForignKey  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
В большинстве случаев можно так: 5679853
Или вот: sp_fkeys
1 дек 11, 15:24    [11690179]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить