Подобные проблемы показывают, что люди, которые делают SQL-сервер, никогда не использовали свой продукт. Это такое явное упущение, что нужно задаться вопросом, что еще они просто забыли сделать правильно (у меня есть список из примерно 30 других сводящих с ума проблем, подобных этой, которые мне пришлось преодолеть, чтобы заставить эту работу работать, как это делают другие БД из коробки, в том числе тот факт, что нам нужен паршивый мастер, чтобы сделать это в первую очередь [если бы у меня было время, которое я потратил, ожидая, пока этот мастер подключит и перечислит одни и те же таблицы для одной и той же БД, каждый раз, назад ... у меня будет время для приятного отдыха]).
Я очень ленивый и не хочу печатать EXEC sp_msforeachtable ...
дважды каждый раз, когда я делаю это. Моя работа заключалась в том, чтобы оставить ограничения на рабочем сервере и удалить их с сервера разработки. Это предотвратит ошибку, но у этого метода есть несколько ОЧЕНЬ БОЛЬШИХ побочных эффектов. Во-первых, вы больше не сможете просто восстановить полную резервную копию на своем сервере разработки (если вы не согласны с их повторным удалением). Во-вторых, это работает лучше всего, когда вы уверены, что потребители ваших данных также применяют эти ограничения (или не заботятся о них). В моем случае у нас есть только один потребитель (наш веб-сайт), поэтому мы встраивали эти ограничения и в код сайта (т.е. перед удалением записи пользователя мы сначала удаляем все записи телефона для этого пользователя). Да, это, по сути, сводит на нет необходимость в ограничениях в первую очередь и удваивает работу, которую мне нужно сделать, но также дает мне возможность убедиться, что мой код работает с ограничениями на основе СУБД или без них (факт заключается в том, что они все еще находятся в процессе разработки). сервер только в качестве плана на случай непредвиденных обстоятельств). Вы могли бы назвать это недостатком в моем дизайне, но я бы предпочел назвать это обходным путем для некорректной СУБД. Во всяком случае, это все же быстрее и проще сделать это где-либо еще, чем в MSSQL, потому что он не может справиться со своим собственным дизайном.
sp_msforeachtable
(иsp_MSForEachDb
) не имеет документов и не поддерживается. Вы не должны / избегать его использования. Это может пропустить таблицы! См. Этот пост от @AaronBertrand -> sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/… и этот элемент подключения - (MS указывает, что это не исправит) -> connect.microsoft.com/SQLServer / обратная связь / подробности / 264677 /…