Такі проблеми показують нам, що люди, які роблять 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 /…