/ / Чи SQL Server перевіряє збережений файл перед його запуском? - sql-server-2008, tsql, збережені процедури

Чи SQL Server перевіряє збережений файл перед його запуском? - sql-server-2008, tsql, збережені процедури

Я перевірив багато потоків зараз, і я не можу знайти відповідь на це, і я повинен бути досить впевнений / впевнений, що я правильно приймаю це перед тим, як відповідати на клієнта.

так, як зазначає заголовок, Чи SQL Server перевіряє збережену процедуру перед її запуском?

IE: Навіть якщо у мене є IF statement що ніколи не зустріне певної умови, чи буде кодекс у цьому IF statement condition перевіряти і перевіряти перед запуском?

EDIT: Ось короткий приклад:

DECLARE @ParamSource VARCHAR(2) = "V3"

IF @ParamSource = "V1"
BEGIN
--USE LINKED SERVER HERE WHICH THROWS AN ERROR ABOUT CONNECTIONS
END

IF @ParamSource = "V3"
BEGIN
--DO MY ACTUAL CODE
END

Я ніколи не зустріну цього першого стану, але чомусь мій збережений процес намагається перевірити час виконання та зберігає помилку.

Відповіді:

1 для відповіді № 1

Коли створюється збережена процедура, це єякий складається, що означає, що кожен об'єкт, що використовується в збереженій процедурі, перевіряється. Для всіх існуючих об'єктів вам також потрібно мати доступ до них. Це створить план виконання цієї збереженої процедури, і якщо процедура не змінюється, план виконання повинен залишатися чинним. Якщо будь-який об'єкт таблиці, що використовується в збереженій процедурі, не існує (тільки для таблиці, не пов'язаних серверів) план виконання не буде створено на даний момент, але процедура буде створена, якщо не буде знайдено інших помилок.

У вашому прикладі вам потрібен доступ до пов'язаногосерверний об'єкт для створення своєї збереженої процедури. Після створення, якщо ви більше не маєте доступу до пов'язаного сервера, ваша процедура буде продовжуватися, але призведе до помилки, якщо йому потрібно отримати доступ до пов'язаного сервера IF @ParamSource = "V1". Однак, якщо це не стосується пов'язаного сервера IF @ParamSource = "V3", помилки не буде.

В принципі, це означає, що користувач, який створює процедуру, повинен мати доступ до пов'язаного сервера.