Результат работы процедуры выглядит следующим образом:
---------- ------ результат 30
(1 row(s) affected)
Встроенные процедуры могут быть перекомпилированы, но вы не должны это делать часто, и только когда:
Передаётся значение параметра в встроенную процедуру, которая возвращает широко меняющийся набор данных.
Добавлен новый индекс в основную таблицу, из которого встроенная процедура может получить выгоду.
Значение параметра, который вы указываете, не имеет типа.
Сервер SQL предоставляет методы для явного перекомпилирования процедуры.
Оператор CREATE PROCEDURE ... [WITH RECOMPILE] указывает, что сервер не должен кэшировать план выполнения процедуры. Вместо этого, опция перекомпилирует процедуру каждый раз, когда она вызывается.
Следующий пример создаёт процедуру, которая перекомпилируется каждый раз, когда она вызывается.
USE Northwind
GO
CREATE PROC dbo.OrderCount
@CustomerID nchar(10)
WITH RECOMPILE
AS
SELECT count(*)
FROM [Orders Qry]
WHERE CustomerID = @CustomerID
GO
Оператор EXECUTE ... [WITH RECOMPILE] создаёт новый план выполнения каждый раз, когда процедура выполняется, если вы указали опцию WITH RECOMPILE. Новый план выполнения не сохраняется в КЭШе. Используйте эту опцию, когда параметр, который вы передаёте, сильно отличается от того, который вы часто используете. После выполнения желательно снова выполнить процедуру с обычным параметром. Эту опцию часто используют, если данные сильно изменились с момента последней компиляции.
Следующая опция перекомпилирует процедуру в момент выполнения:
EXEC CustomerInfo WITH RECOMPILE
Встроенная процедура sp_recompile перекомпилирует указанную встроенную процедуру или триггер для последующего выполнения. Если параметр @objectname указывает таблицу или просмотрщик, все процедуры, которые используют этот объект будут перекомпилированы для дальнейшего использования.
Используйте процедуру sp_recompile с опцией tablename если вы добавили новый индекс в основную таблицу, на которую ссылается встроенная процедура и если вы думаете, что производительность повысится от использования индекса.
Следующий пример перекомпилирует все процедуры и триггеры, которые ссылаются на таблицу Customers.
EXEC sp_recompile Customers
Вы можете использовать DBCC FREEPROCCACHE для очистки всех планов выполнения встроенных процедур из КЭШа.
Расширенные процедуры – это функции внутри DLL, которые увеличивают функциональность SQL Server. Они выполняются схожим с встроенными процедурами образом, и они поддерживают входные параметры, возвращают статус выполнения и выходные параметры.
Следующий пример выполняет sp_cmdshell расширенную процедуру, которая отображает список файлов и поддиректорий, с помощью выполнения команды ОС dir:
EXEC master..xp_cmdshell 'dir c:\'
Результат выполнения:
output
---------------------------------------------------------------------------
Volume in drive C is Windows 2003 Server
Volume Serial Number is E04D-393F
NULL
Directory of c:\
NULL
03.04.2003 20:00 278 688 $LDR$
28.04.2003 10:34 <DIR> Documents and Settings
28.04.2003 10:55 <DIR> Inetpub
29.04.2003 10:50 <DIR> Program Files
30.01.2003 20:28 <DIR> RoxioTmp
04.04.2002 21:23 19 133 SCANDISK.LOG
03.06.2003 08:50 <DIR> System Volume Information
22.05.2003 14:30 <DIR> Temp
03.04.2003 20:00 457 515 txtsetup.sif
06.05.2003 15:37 <DIR> WINDOWS
28.04.2003 10:27 <DIR> wmpub
4 File(s) 755 355 bytes
8 Dir(s) 3 196 006 400 bytes free
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.