2014-10-29 4 views
0

У меня есть база данных с таблицами 2K +. Мне нужно проверить, используется ли строка в одной таблице любой другой таблицы (все отношения работают с идентификаторами). Только идея у меня естьПроверка ссылочной целостности SQL-сервера

BEGIN TRY 
BEGIN TRANSACTION 
    DELETE dbo.LC147_PlanProracuna WHERE PlanProracunaID = 47 
    SELECT 1 
ROLLBACK 
END TRY 
BEGIN CATCH 
SELECT 0 
END CATCH 

Как проверить, если строка в таблице А используется в любой другой таблицы в базе данных, или (еще лучше), как делает SQL-сервер проверяет ссылочную целостность (и как я могу использовать такой же метод, если это возможно)?

ответ

2

Если вы говорите об обнаружении зависимости между таблицами, то для этой цели вы можете использовать sys.dm_sql_referencing_entities, а также sys.dm_sql_referenced_entities.

Ниже приведен пример, который вернет объекты в указанной базе данных, которые относятся к таблице LC147_PlanProracuna.

SELECT referencing_schema_name, 
referencing_entity_name, 
referencing_id, 
referencing_class_desc, 
is_caller_dependent 
FROM sys.dm_sql_referencing_entities ('DB_NAME.dbo.LC147_PlanProracuna', 'OBJECT'); 

Вы можете также найти This Article полезным.

+0

Это не то, что им нужно, чтобы он показывал объекты. Мне нужно проверить, ссылается ли определенная строка в таблице A (у меня есть Identity/PK этой строки) в любой другой таблице. В моем примере мне нужно проверить, ссылается ли строка с ID = 47 –

+0

Чтобы проверить это, вы можете сделать 'INNER JOIN' с другой таблицей, говорящей« от LC147_PlanProracuna t1 »join other_table t2 на t1.ID = t2.ID ' – Rahul

+0

Чувак, с 2k таблицами в БД, который является длинным запросом, который может/будет вычисляться за несколько секунд. Во-вторых, с добавлением новых таблиц в БД, запрос будет устаревшим, и он не является жизнеспособным для хранимых процедур. Если нет «чистого и легкого» способа сделать это, плохо сделайте динамический запрос, который будет делать это с системными таблицами, а затем выполните код с идентификатором определенных строк/строк –

Смежные вопросы