Я перевірив багато потоків зараз, і я не можу знайти відповідь на це, і я повинен бути досить впевнений / впевнений, що я правильно приймаю це перед тим, як відповідати на клієнта.
так, як зазначає заголовок, Чи 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"
, помилки не буде.
В принципі, це означає, що користувач, який створює процедуру, повинен мати доступ до пов'язаного сервера.