Sql Server - Избегайте отложенной компиляции - PullRequest
2 голосов
/ 03 января 2012

У меня есть приложение, которое запрашивает и обновляет две базы данных одновременно (отличающиеся друг от друга), и оно уже работает от 10 до 15 лет. Поэтому я хотел бы начать убирать мусор из них.

Одна из вещей, которую я хочу сделать, - удалить все хранимые процедуры в базе данных B, которые по ошибке были созданы там (потому что они должны были войти в базу данных A).

Если я делаю один за другим, это легко, потому что я могу сказать, использует ли sp таблицу, которой нет в этой базе данных. Но держу пари, что их много, поэтому я хочу получить запрос, подтверждающий это.

Это ссылка от Microsoft, которая объясняет это: http://msdn.microsoft.com/en-us/library/ms190686.aspx. Но это не дает мне никакого решения! : S

Я попробовал следующий метод: http://beyondrelational.com/blogs/jacob/archive/2009/01/28/tsql-how-to-revalidate-refresh-recompile-all-stored-procedures-in-a-database.aspx

Но это работало для некоторых, но не для всех.

Так вы, ребята, знаете какой-нибудь эффективный метод, который будет работать 100% времени? Пробные:

  • Перекомпиляция> НЕ
  • sp_refreshsqlmodule> работает для большинства, но не для всех
  • sp_depends> это может работать, так как все SP должны иметь зависимость от таблицы (по крайней мере, большинство из них). ОБНОВЛЕНИЕ: это тоже не работает. Если у меня есть sp, который ищет таблицы в обеих базах данных, он разрешит те, которые могут, но не все. Поэтому я не могу полагаться на «если нет зависимостей, кандидат на удаление».

Заранее спасибо

Ответы [ 2 ]

3 голосов
/ 03 января 2012

Там нет гарантированного пути.

Отложенное разрешение имен (например, если таблицы нет, выдает ошибку) применяется во время компиляции, а не во время создания. Хотя есть некоторые свидетельства того, что код может выполняться с отсутствующими таблицами

Был запрошен, однако: см. Предлагаемый SET OPTION STRICT ON MS Connect запрос, который поступает от Erland Sommarskog

0 голосов
/ 10 декабря 2014

Пожалуйста, проверьте мой ответ на соответствующий вопрос здесь:

Я ищу надежный способ проверки хранимых процедур T-SQL. Кто-нибудь есть один?

Я не проверял его с 2 базами данных, но работал ли он нормально для объектов в приложении с одной базой данных.

...