1120 Я знаю, что было дано много ответов, но ни один из них, похоже, не решал проблему. Вот мой взгляд на решение:
, с которого начинается OP. Это работает очень хорошо, но иногда добавляет ?
к URL. ?
является главной проблемой. ?
не добавлялся к URL. Он будет легко возвращаться к методу
для очень небольшой части пользователей, у которых не включен JavaScript.
или
вообще появятся. В этом примере я использую jQuery, потому что это быстро и просто, но это можно сделать и в «ванильном» JavaScript.
action
.
// Listen for any clicks on an element in the document with the `link` class
$(document).on('click', '.link', function(e) {
// Prevent the default action (e.g. submit the form)
e.preventDefault();
// Get the URL specified in the form
var url = e.target.parentElement.action;
window.location = url;
});
Form buttons as links
Кроме того, вы можете рассмотреть возможность использования Visual Studio Team System 2008 Database Edition , которая, помимо прочего, выполняет статическую проверку всех хранимых процедур в проекте при сборке. , таким образом гарантируя, что все согласовано с текущей схемой.
Немного затянувшийся вариант:
Пара суетливых ошибок, таких как:
Чтобы быстро отбросить 10 или 1000 процедур, запустите
SELECT 'DROP PROCEDURE ' + schema_name(schema_id) + '.' + name
from sys.procedures
, выберите результат и запустите его.
Предполагается, что вы делать очень нечастую задачу. Если вам нужно делать это регулярно (ежедневно, еженедельно ...), сообщите нам, почему!
Вы также можете сделать это «на месте» - не получите все утверждения.
В дополнение к настройке NOEXEC на
, вам также нужно будет установить ваш любимый showplan_ * на
(я использую showplan_text
). Теперь вы можете избавиться от своего шага 2 и просто выполнить каждую процедуру, которую вы получили на шаге 1.
Вот образец с использованием индивидуальной хранимой процедуры. Вы можете работать в свой любимый цикл:
create procedure tests @bob int as
select * from missing_table_or_view
go
set showplan_text on;
go
set noexec on
exec tests
set noexec off
go
set showplan_XML off
go
drop procedure tests
go
Вышеуказанный образец должен генерировать следующий выход:
MSG 208, уровень 16, состояние 1, тесты процедуры, линия 2
Неверное имя объекта «SPACK_TABLE_OR_VIEW».
Нет никакого способа сделать это из T-SQL, или менеджера предприятия, поэтому мне пришлось что-то написать из кода клиента. Я не буду публиковать весь код здесь, но хитрость:
1) Получить список всех хранимых процедур
SELECT ROUTINE_NAME AS StoredProcedureName
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'PROCEDURE' --as opposed to a function
ORDER BY ROUTINE_NAME
2) Получить хранимую процедуру Создать T-SQL:
select
c.text
from dbo.syscomments c
where c.id = object_id(N'StoredProcedureName')
order by c.number, c.colid
option(robust plan)
3) Запустите создание Заявление с NOEXEC ON, так что синтаксис проверяется, но на самом деле он не пытается создать сохраненную процедуру:
connection("SET NOEXEC ON", ExecuteNoRecords);
connection(StoredProcedureCreateSQL, ExecuteNoRecords);
connection("SET NOEXEC ON", ExecuteNoRecords);