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ď č. 1Keď 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.