Sdílet prostřednictvím


Příprava příkazů

Platí na:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytický platformový systém (PDW)SQL databáze v Microsoft Fabric

Stáhnout ovladač OLE DB

OLE DB Driver pro SQL Server podporuje přípravu příkazů pro optimalizované vícenásobné provedení jednoho příkazu; příprava příkazů však generuje režijní režii, takže uživatel nemusí připravovat příkaz k jeho provedení vícekrát. Obecně by měl být příkaz připraven, pokud bude vykonán více než třikrát.

Z důvodu výkonu je příprava příkazu odložena až do jeho provedení. Toto je výchozí chování. Případné chyby v připravovaném příkazu nejsou známy, dokud není příkaz vykonán nebo operace metavlastností. Nastavení vlastnosti SQL Server SSPROP_DEFERPREPARE na FALSE může toto výchozí chování vypnout.

V SQL Serveru, když je příkaz vykonán přímo (bez předchozí přípravy), je vytvořen a uložen do mezipaměti. Pokud je SQL příkaz vykonán znovu, SQL Server má efektivní algoritmus, který nový příkaz porovná s existujícím plánem vykonání v cache a znovu použije tento plán vykonání pro tento příkaz.

Pro připravené příkazy poskytuje SQL Server nativní podporu pro přípravu a provádění příkazových příkazů. Když připravujete příkaz, SQL Server vytvoří plán vykonání, uloží ho do cache a vrátí poskytovateli handle tohoto plánu. Poskytovatel pak tuto rukojeť používá k opakovanému provádění příkazu. Nejsou vytvořeny žádné uložené procedury. Protože handle přímo identifikuje plán vykonání SQL příkazu místo toho, aby příkaz odpovídal plánu vykonání v cache (jak je tomu u přímého vykonání), je efektivnější příkaz připravit než ho vykonávat přímo, pokud víte, že příkaz bude vykonán vícekrát.

V SQL Server 2005 (9.x) nelze připravené příkazy použít k vytváření dočasných objektů a nelze odkazovat na systémové uložené procedury, které vytvářejí dočasné objekty, například dočasné tabulky. Tyto postupy se musí provést přímo.

Některé příkazy by se nikdy neměly připravovat. Například příkazy, které specifikují provádění uložených procedur nebo obsahují neplatný text pro tvorbu uložených procedur v SQL Serveru, by neměly být připravovány.

Pokud je vytvořena dočasná uložená procedura, ovladač OLE DB pro SQL Server vykoná dočasnou uloženou proceduru a vrátí výsledky, jako by byl příkaz sám vykonán.

Vytváření dočasných uložených procedur je řízeno OLE DB Driver pro SQL Server -specific inicializační vlastností SSPROP_INIT_USEPROCFORPREP. Pokud je hodnota vlastnosti buď SSPROPVAL_USEPROCFORPREP_ON nebo SSPROPVAL_USEPROCFORPREP_ON_DROP, ovladač OLE DB pro SQL Server se pokusí vytvořit uloženou proceduru při přípravě příkazu. Vytvoření uložených procedur je úspěšné, pokud má uživatel aplikace dostatečná oprávnění SQL Serveru.

Pro spotřebitele, kteří se odpojují jen zřídka, může vytváření dočasných uložených procedur vyžadovat značné zdroje tempdb, databáze systému SQL Server, ve které jsou vytvářeny dočasné objekty. Když je hodnota SSPROP_INIT_USEPROCFORPREP SSPROPVAL_USEPROCFORPREP_ ZAPNUTO, dočasné uložené procedury vytvořené ovladačem OLE DB pro SQL Server jsou vyřazeny pouze tehdy, když relace, která příkaz vytvořila, ztratí spojení s instancí SQL Serveru. Pokud je toto spojení výchozím spojením vytvořeným při inicializaci datového zdroje, dočasná uložená procedura je ukončena pouze tehdy, když se datový zdroj stane neinicializovaným.

Když je hodnota SSPROP_INIT_USEPROCFORPREP SSPROPVAL_USEPROCFORPREP_ON_DROP, dočasné uložené procedury OLE DB pro SQL Server jsou vyřazeny, když nastane jedna z následujících situací:

  • Spotřebitel používá ICommandText::SetCommandText k označení nového příkazu.

  • Spotřebitel používá ICommandPrepare::Unprepare k označení, že již není potřeba text příkazu.

  • Spotřebitel uvolní všechny odkazy na příkazový objekt pomocí dočasné uložené procedury.

Příkazový objekt má v tempdb maximálně jednu dočasnou uloženou proceduru. Jakákoli existující dočasná uložená procedura představuje aktuální text příkazu konkrétního příkazového objektu.

Viz také

Příkazy