/ / Má SQL Server overenie uložené proc pred spustením? - sql-server-2008, tsql, uložené procedúry

Má SQL Server overenie uložené proc pred spustením? - sql-server-2008, tsql, uložené procedúry

Skontroloval som veľa vlákien a nemôžem nájsť odpoveď na túto skutočnosť a musím byť dosť istý / istý, že mám pravdu, ak to predpokladám pred odpovedaním na klienta.

tak, ako uvádza hlavička, Má SQL Server overiť uloženú procedúru pred jej spustením?

IE: Dokonca aj keď mám IF statement ktoré nikdy nespĺňajú určitú podmienku, bude kód v tom IF statement condition skontrolovať a overiť pred spustením?

EDIT: Tu je rýchly príklad:

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

Nikdy nebudem spĺňať túto prvú podmienku, ale z nejakého dôvodu, môj uložený proces sa pokúša overenie v čase spustenia a stále chybuje.

odpovede:

1 pre odpoveď č. 1

Keď sa vytvorí uložená procedúra, je točo znamená, že každý objekt použitý v uloženej procedúre je overený. Pre všetky existujúce objekty je potrebné mať k nim prístup. Týmto sa vytvorí plán vykonávania tejto uloženej procedúry a pokiaľ sa postup nezmení, plán vykonávania by mal zostať platný. Ak neexistuje akýkoľvek objekt tabuľky použitý v uloženej procedúre (iba tabuľka, nie prepojené servery) plán vykonania sa v tomto okamihu nevytvorí, ale postup sa vytvorí, ak sa nenájdu žiadne ďalšie chyby.

Vo vašom príklade potrebujete prístup k prepojenémuserver pre vytvorenie uloženej procedúry. Po vytvorení, ak už nemáte prístup k prepojenému serveru, váš postup bude stále spustený, ale bude generovať chybu, ak potrebuje prístup k prepojenému serveru IF @ParamSource = "V1", Avšak, ak sa nenachádza na prepojený server IF @ParamSource = "V3", nedôjde k žiadnej chybe.

V podstate to znamená, že používateľ, ktorý vytvorí postup, musí mať prístup k prepojenému serveru.