Как отследить зависимость уровня строки? - PullRequest
0 голосов
/ 11 сентября 2010

Например, если мне нужно изменить PK одной строки с 1 на 10, есть ли способ отследить каждый процесс, представление и функцию, которые могут ссылаться на старое значение?простой выбор в процедуре, такой как: select * from table where FK = 1, сломался бы, и мне пришлось бы искать каждую ссылку для ссылок в каждом процессе и просматривать и изменять их на 10, чтобы заставить систему работать.Есть ли автоматический способ сделать это?Я использую SQL SERVER.

1 Ответ

0 голосов
/ 11 сентября 2010

Я подозреваю, что единственный способ сделать это правильно - это запросить метаданные базы данных - идентифицировать все места, где ваш PK используется как FK, в процедуре или в представлении. Это может быть сложно; хрупкий; и подвержен ошибкам.

Это одна из (многих) причин, по которой следует избегать использования PK как чего-либо иного, кроме производного от системы, бессмысленного значения, которое недоступно для манипуляций (даже) создателем / администратором. Кроме того, при каких обстоятельствах вы жестко закодировали бы PK в процедуре или функции - опять же потенциальный источник уязвимости в вашей системе.

Если создан PK, который является неправильным (по каким-либо критериям) или который необходимо изменить, создайте новую запись и скопируйте в нее существующие значения. Хотя это не отвечает на ваш запрос, ваши процедуры для удаления или изменения значений в таблице должны знать, как и где она используется; и поэтому процедура копирования строки должна иметь доступ к этой информации.

...