SET NOEXEC (Transact-SQL)

Компилирует каждый запрос, но не выполняет его.

Значок ссылки на разделСинтаксические обозначения в Transact-SQL

Синтаксис

SET NOEXEC { ON | OFF }

Замечания

Если выполняется инструкция SET NOEXEC ON, SQL Server компилирует каждый пакет инструкций языка Transact-SQL, но не выполняет их. Если выполняется инструкция SET NOEXEC OFF, то все пакеты выполняются после компиляции.

Выполнение инструкций в SQL Server происходит в два этапа: компиляция и выполнение. Этот параметр полезен для проверки синтаксиса и имен объектов SQL Server в исходном коде языка Transact-SQL при выполнении. Он также полезен для инструкций отладки, которые, как правило, являются частью более крупного пакета инструкций.

Параметр SET NOEXEC устанавливается на этапе выполнения или запуска, но не на этапе синтаксического анализа.

Разрешения

Требуется членство в роли public.

Примеры

В следующем примере используется инструкция NOEXEC с корректным запросом, запрос с некорректным именем объекта и запрос с неверным синтаксисом.

USE AdventureWorks2008R2;
GO
PRINT 'Valid query';
GO
-- SET NOEXEC to ON.
SET NOEXEC ON;
GO
-- Inner join.
SELECT e.BusinessEntityID, e.JobTitle, v.Name
FROM HumanResources.Employee AS e 
   INNER JOIN Purchasing.PurchaseOrderHeader AS poh
   ON e.BusinessEntityID = poh.EmployeeID
   INNER JOIN Purchasing.Vendor AS v
   ON poh.VendorID = v.BusinessEntityID;
GO
-- SET NOEXEC to OFF.
SET NOEXEC OFF;
GO

PRINT 'Invalid object name';
GO
-- SET NOEXEC to ON.
SET NOEXEC ON;
GO
-- Function name uses is a reserved keyword.
USE AdventureWorks2008R2;
GO
CREATE FUNCTION dbo.Values(@BusinessEntityID int)
RETURNS TABLE
AS
RETURN (SELECT PurchaseOrderID, TotalDue
   FROM dbo.PurchaseOrderHeader
   WHERE VendorID = @BusinessEntityID);
   
-- SET NOEXEC to OFF.
SET NOEXEC OFF;
GO

PRINT 'Invalid syntax';
GO
-- SET NOEXEC to ON.
SET NOEXEC ON;
GO
-- Built-in function incorrectly invoked.
SELECT *
FROM fn_helpcollations;
-- Reset SET NOEXEC to OFF.
SET NOEXEC OFF;
GO