Sdílet prostřednictvím


Spuštění úlohy SQL

platí pro:SQL Server SSIS Integration Runtime ve službě Azure Data Factory

Úloha Execute SQL spouští příkazy SQL nebo uložené procedury z balíčku. Úloha může obsahovat jeden příkaz SQL nebo více příkazů SQL, které se spouštějí postupně. Úlohu Execute SQL můžete použít pro následující účely:

  • Zkraťte tabulku nebo zobrazení kvůli přípravě na vkládání dat.

  • Umožňuje vytvářet, měnit a odstraňovat databázové objekty, jako jsou tabulky a zobrazení.

  • Před načtením dat do nich znovu vytvořte tabulky faktů a dimenzí.

  • Spusťte uložené procedury. Pokud příkaz SQL vyvolá uloženou proceduru, která vrací výsledky z dočasné tabulky, použijte možnost WITH RESULT SETS k definování metadat pro sadu výsledků.

  • Uložte sadu řádků vrácenou z dotazu do proměnné.

Spuštění úlohy SQL lze použít v kombinaci s kontejnery Foreach Loop a For Loop ke spuštění více příkazů SQL. Tyto kontejnery implementují opakující se řídicí toky v balíčku a můžou opakovaně spouštět úlohu Spustit SQL. Například pomocí kontejneru Foreach Loop může balíček vytvořit výčet souborů ve složce a spustit úlohu Execute SQL opakovaně, aby se spustil příkaz SQL uložený v každém souboru.

Připojení ke zdroji dat

Úloha Execute SQL může použít různé typy správců připojení pro připojení ke zdroji dat, ve kterém spouští příkaz SQL nebo uloženou proceduru. Úloha může používat typy připojení uvedené v následující tabulce.

Typ připojení Správce připojení
Excel Správce připojení aplikace Excel
OLE Správce připojení OLE DB
rozhraní ODBC Správce připojení ODBC
rozhraní ADO Správce připojení ADO
ADO.NET Správce připojení ADO.NET
SQLMOBILE SQL Server Compact Edition Connection Manager

Vytváření příkazů SQL

Zdrojem příkazů SQL používaných touto úlohou může být vlastnost úkolu, která obsahuje příkaz, připojení k souboru, který obsahuje jeden nebo více příkazů, nebo název proměnné, která obsahuje příkaz. Příkazy SQL musí být napsané v dialektu zdrojového systému pro správu databází (DBMS). Další informace najdete v tématu Dotazy služby SSIS (Integration Services).

Pokud jsou příkazy SQL uložené v souboru, úloha se k souboru připojí pomocí správce připojení k souboru. Další informace naleznete v tématu Správce připojení k souborům.

V nástroji SSIS Designer můžete pomocí dialogového okna Spustit editor úloh SQL zadat příkazy SQL nebo použít Tvůrce dotazů, grafické uživatelské rozhraní pro vytváření dotazů SQL.

Poznámka:

Platné příkazy SQL zapsané mimo úlohu Execute SQL nemusí být úspěšně analyzovány úlohou Execute SQL.

Poznámka:

Úloha Execute SQL používá hodnotu výčtu RecognizeAll ParseMode. Další informace naleznete v tématu ManagedBatchParser Namespace.

Odeslání více příkazů v dávce

Pokud do úlohy Execute SQL zahrnete více příkazů, můžete je seskupit a spustit v rámci dávky. Použijte příkaz GO ke signalizaci konce dávky. Všechny příkazy SQL mezi dvěma příkazy GO se odesílají v dávce zprostředkovateli OLE DB k provedení. Příkaz SQL může obsahovat více dávek oddělených příkazy GO.

Existují omezení typů příkazů SQL, které můžete seskupit v dávce. Další informace naleznete v sekci Dávky příkazů.

Pokud spuštění úlohy SQL spustí dávku příkazů SQL, platí pro dávku následující pravidla:

  • Pouze jeden příkaz může vrátit sadu výsledků a musí to být první příkaz v dávce.

  • Pokud sada výsledků používá vazby výsledků, musí dotazy vrátit stejný počet sloupců. Pokud dotazy vrátí jiný počet sloupců, úloha selže. I když ale úloha selže, mohou být dotazy, které se spustí, například dotazy DELETE nebo INSERT, úspěšné.

  • Pokud vazby výsledků používají názvy sloupců, musí dotaz vrátit sloupce se stejnými názvy jako názvy sady výsledků, které se používají v úloze. Pokud sloupce chybí, úloha selže.

  • Pokud úloha používá vazbu parametrů, musí mít všechny dotazy v dávce stejný počet a typy parametrů.

Spuštění parametrizovaných příkazů SQL

Příkazy SQL a uložené procedury často používají vstupní parametry, výstupní parametry a návratové kódy. Úloha Execute SQL podporuje typy parametrů Input, Output a ReturnValue . Vstupní typ použijete pro vstupní parametry, Výstup pro výstupní parametry a ReturnValue pro návratové kódy.

Poznámka:

Parametry můžete použít v úloze Execute SQL pouze v případě, že je poskytovatel dat podporuje.

Zadání typu sady výsledků

V závislosti na typu příkazu SQL může sada výsledků nebo nemusí být vrácena do úlohy Execute SQL. Například příkaz SELECT obvykle vrací sadu výsledků, ale příkaz INSERT ne. Sada výsledků příkazu SELECT může obsahovat nula řádků, jeden řádek nebo mnoho řádků. Uložené procedury mohou také vrátit celočíselnou hodnotu označovanou jako návratový kód, který označuje stav spuštění procedury. V takovém případě se sada výsledků skládá z jednoho řádku.

Konfigurujte úlohu Spustit SQL

Úlohu Spustit SQL můžete nakonfigurovat následujícími způsoby:

  • Zadejte typ správce připojení, který se má použít pro připojení k databázi.

  • Zadejte typ sady výsledků, kterou příkaz SQL vrátí.

  • Zadejte časový limit pro příkazy SQL.

  • Zadejte zdroj příkazu SQL.

  • Určuje, jestli úkol přeskočí fázi přípravy pro příkaz SQL.

  • Pokud používáte typ připojení ADO, musíte určit, zda příkaz SQL je uložená procedura. U jiných typů připojení je tato vlastnost jen pro čtení a její hodnota je vždy false.

Vlastnosti můžete nastavit programově nebo prostřednictvím návrháře SSIS.

Obecná stránka – Spuštění editoru úloh SQL

Na stránce Obecné dialogového okna Spustit editor úloh SQL nakonfigurujte úlohu Execute SQL a zadejte příkaz SQL, který úloha spouští.

Další informace o dotazovacím jazyku Transact-SQL najdete v tématu Transact-SQL Reference (databázový stroj).

Statické možnosti

název
Zadejte jedinečný název úlohy Execute SQL v pracovním postupu. Zadaný název se zobrazí v návrháři SSIS.

Description
Popište úlohu Provést SQL. Osvědčeným postupem je zajistit, aby se balíčky samy zdokumentovaly a usnadnily údržbu, popisují úkol z hlediska jeho účelu.

Přerušení zápasu
Zadejte maximální počet sekund, po který bude úloha spuštěna před uplynutím časového limitu. Hodnota 0 označuje nekonečný čas. Výchozí hodnota je 0.

Poznámka:

Uložené procedury nevyvolají časový limit, pokud napodobují funkce uspání tím, že poskytují dostatečný čas na navázání připojení a dokončení transakcí, který přesahuje počet sekund určený TimeOut. Uložené procedury, které provádějí dotazy, se však vždy řídí časovým omezením určeným časovým limitem.

CodePage
Zadejte znakovou stránku, která se má použít při překladu hodnot Unicode v proměnných. Výchozí hodnota je znaková stránka místního počítače.

Poznámka:

Pokud spuštění úlohy SQL používá správce připojení ADO nebo ODBC, vlastnost CodePage není k dispozici. Pokud vaše řešení vyžaduje použití znakové stránky, použijte OLE DB nebo správce připojení ADO.NET s úlohou Execute SQL.

TypeConversionMode
Když tuto vlastnost nastavíte na Povoleno, execute SQL Task se pokusí převést výstupní parametr a výsledky dotazu na datový typ proměnné, ke které jsou výsledky přiřazeny. To platí pro typ sady výsledků s jedním řádkem .

Sada výsledků
Zadejte typ výsledku očekávaný spuštěním příkazu SQL. Zvolte jeden řádek, úplnou sadu výsledků, XML nebo Žádné.

TypPřipojení
Zvolte typ správce připojení, který se má použít pro připojení ke zdroji dat. Mezi dostupné typy připojení patří OLE DB, ODBC, ADO, ADO.NET a SQLMOBILE.

Související témata:Správce připojení OLE DB, Správce připojení ODBC, Správce připojení ADO, ADO.NET Connection Manager, SQL Server Compact Edition Connection Manager

Připojení
Vyberte připojení ze seznamu definovaných správců připojení. Chcete-li vytvořit nové připojení, vyberte Možnost <Nové připojení...>.

SQLSourceType
Vyberte typ zdroje příkazu SQL, který úloha spustí.

V závislosti na typu správce připojení, který spouští úlohu SQL, musíte v parametrizovaných příkazech SQL použít konkrétní značky parametrů.

Tato vlastnost obsahuje možnosti uvedené v následující tabulce.

Hodnota Description
Přímý vstup Nastavte zdroj na příkaz Transact-SQL. Výběrem této hodnoty se zobrazí dynamická možnost SQLStatement.
Připojení k souboru Vyberte soubor, který obsahuje příkaz Transact-SQL. Nastavení této možnosti zobrazí dynamickou možnost FileConnection.
Proměnná Nastavte zdroj na proměnnou, která definuje příkaz Transact-SQL. Výběrem této hodnoty se zobrazí dynamická možnost SourceVariable.

QueryIsStoredProcedure
Určuje, zda zadaný příkaz SQL, který se má spustit, je uložená procedura. Tato vlastnost je jen pro čtení a zápis, pouze pokud úloha používá správce připojení ADO. V opačném případě je vlastnost jen pro čtení a její hodnota je false.

BypassPrepare
Určete, jestli je příkaz SQL připravený. true přeskočí přípravu; false připraví příkaz SQL před jeho spuštěním. Tato možnost je dostupná pouze u připojení OLE DB, která podporují přípravu.

Související témata:Připravené spuštění

Procházet
Pomocí dialogového okna Otevřít vyhledejte soubor, který obsahuje příkaz SQL. Vyberte soubor, jehož obsah chcete zkopírovat jako příkaz SQL do vlastnosti SQLStatement.

Sestavení dotazu
Pomocí dialogového okna Tvůrce dotazů vytvořte příkaz SQL, který se používá k vytváření dotazů. Tato možnost je k dispozici, pokud je možnost SQLSourceType nastavena na Přímý vstup.

Parsovat dotaz
Ověřte syntaxi příkazu SQL.

Dynamické možnosti SQLSourceType

SQLSourceType = přímý vstup

SQLStatement
Zadejte příkaz SQL, který se má provést, do pole s možností, nebo kliknutím na tlačítko Procházet (...) zadejte příkaz SQL do dialogového okna Zadat dotaz SQL nebo kliknutím na příkaz Sestavit dotaz vytvořte příkaz pomocí dialogového okna Tvůrce dotazů .

Související témata:Tvůrce dotazů

SQLSourceType = Připojení k souboru

FileConnection
Vyberte existujícího správce připojení k souborům nebo kliknutím na tlačítko <Nové připojení...> vytvořte nového správce připojení.

Související témata:Správce připojení souborů, Editor Správce připojení souborů

SQLSourceType = proměnná

Zdrojová proměnná
Vyberte existující proměnnou nebo klikněte na tlačítko <Nová proměnná...> a vytvořte novou proměnnou.

Související témata:Proměnné služby SSIS (Integration Services),Přidání proměnné

Stránka mapování parametrů – Spuštění editoru úloh SQL

Pomocí stránky Mapování parametrů dialogového okna Spustit editor úloh SQL mapujte proměnné na parametry v příkazu SQL.

Možnosti

Název proměnné
Po přidání mapování parametrů kliknutím na Přidat vyberte ze seznamu systémovou nebo uživatelem definovanou proměnnou nebo klikněte na <tlačítko Nová proměnná...> a přidejte novou proměnnou pomocí dialogového okna Přidat proměnnou .

Související témata:Proměnné SSIS (Integration Services)

Směr
Vyberte směr parametru. Namapujte každou proměnnou na vstupní parametr, výstupní parametr nebo návratový kód.

Datový typ
Vyberte datový typ parametru. Seznam dostupných datových typů je specifický pro poskytovatele vybraného ve správci připojení používaném úlohou.

název parametru
Zadejte název parametru.

V závislosti na typu správce připojení, který úloha používá, musíte použít čísla nebo názvy parametrů. Některé typy správce připojení vyžadují, aby první znak názvu parametru je znak @ , konkrétní názvy jako @Param1 nebo názvy sloupců jako názvy parametrů.

Velikost parametru
Zadejte velikost parametrů s proměnnou délkou, například řetězce a binární pole.

Toto nastavení zajistí, že zprostředkovatel přidělí dostatek místa pro hodnoty parametrů s proměnnou délkou.

Add
Kliknutím přidáte mapování parametrů.

Remove
V seznamu vyberte mapování parametrů a klikněte na tlačítko Odebrat.

Stránka Sada výsledků – Spuštění editoru úloh SQL

Pomocí stránky Sada výsledků dialogového okna Spustit editor úloh SQL namapujte výsledek příkazu SQL na nové nebo existující proměnné. Možnosti v tomto dialogovém okně jsou zakázány, pokud je vlastnost ResultSet na stránce Obecné nastavena na hodnotu Žádné.

Možnosti

Název výsledku
Po přidání sady mapování výsledků kliknutím na Přidat zadejte název výsledku. V závislosti na typu sady výsledků musíte použít konkrétní názvy výsledků.

Pokud je typ sady výsledků Jeden řádek, můžete použít název sloupce vráceného dotazem nebo číslo, které představuje pozici sloupce v seznamu sloupců sloupce vráceného dotazem.

Pokud je typ sady výsledků Úplná sada výsledků nebo XML, musíte jako název sady výsledků použít hodnotu 0.

Název proměnné
Namapujte výsledek nastavený na proměnnou tak, že vyberete proměnnou nebo kliknete na <tlačítko Nová proměnná.> Novou proměnnou přidáte pomocí dialogového okna Přidat proměnnou .

Add
Kliknutím přidáte mapování sady výsledků.

Remove
Vyberte mapování sady výsledků v seznamu a klikněte na tlačítko Odebrat.

Parametry v úloze Execute SQL

Příkazy SQL a uložené procedury často používají vstupní parametry, výstupní parametry a návratové kódy. V integračních službách úloha Execute SQL podporuje typy parametrů Input, Output a ReturnValue . Vstupní typ použijete pro vstupní parametry, Výstup pro výstupní parametry a ReturnValue pro návratové kódy.

Poznámka:

Parametry můžete použít v úloze Execute SQL pouze v případě, že je poskytovatel dat podporuje.

Parametry v příkazech SQL, včetně dotazů a uložených procedur, se mapují na uživatelem definované proměnné, které jsou vytvořeny v rámci oboru úlohy Execute SQL, nadřazeného kontejneru nebo v oboru balíčku. Hodnoty proměnných je možné nastavit v době návrhu nebo dynamicky za běhu. Parametry můžete také mapovat na systémové proměnné. Další informace naleznete v tématu Proměnné služby SSIS (Integration Services) a systémové proměnné.

Práce s parametry a návratovými kódy v úloze Execute SQL je ale více než jen znalost toho, jaké typy parametrů úloha podporuje a jak se tyto parametry mapují. Existují další požadavky na použití a pokyny pro úspěšné použití parametrů a návratových kódů v úloze Spustit SQL. Zbývající část tohoto tématu popisuje tyto požadavky a pokyny k používání:

Názvy a značky parametrů

V závislosti na typu připojení, který používá úloha Execute SQL, syntaxe příkazu SQL používá různé značky parametrů. Například typ správce připojení ADO.NET vyžaduje, aby příkaz SQL používal značku parametru ve formátu @varParameter, zatímco typ připojení OLE DB vyžaduje značku parametru otazníku (?).

Názvy, které můžete použít jako názvy parametrů v mapování mezi proměnnými a parametry, se také liší podle typu správce připojení. Například typ správce připojení ADO.NET používá uživatelem definovaný název s předponou @, zatímco typ správce připojení OLE DB vyžaduje, abyste jako název parametru použili číselnou hodnotu 0 ordinal.

Následující tabulka shrnuje požadavky pro příkazy SQL pro typy správce připojení, které může použít úloha Execute SQL.

Typ připojení Značka parametru Název parametru Příklad příkazu SQL
rozhraní ADO ? Param1, Param2, ... SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?
ADO.NET @<název parametru> @<název parametru> SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = @parmContactID
rozhraní ODBC ? 1, 2, 3, ... SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?
EXCEL a OLE DB ? 0, 1, 2, 3, ... SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?

Použití parametrů s správci připojení ADO.NET a ADO

ADO.NET a správci připojení ADO mají specifické požadavky na příkazy SQL, které používají parametry:

  • ADO.NET správci připojení vyžadují, aby příkaz SQL používal názvy parametrů jako značky parametrů. To znamená, že proměnné lze mapovat přímo na parametry. Například proměnná @varName je namapována na parametr pojmenovaný @parName a poskytuje hodnotu parametru @parName.

  • Správci připojení ADO vyžadují, aby příkaz SQL jako značky parametrů používal otazníky (?). Jako názvy parametrů však můžete použít libovolný uživatelsky definovaný název s výjimkou celočíselné hodnoty.

Aby bylo možné zadat hodnoty parametrů, proměnné se mapují na názvy parametrů. Potom úloha Execute SQL použije pořadovou hodnotu názvu parametru v seznamu parametrů k načtení hodnot z proměnných do parametrů.

Použití parametrů se správci připojení EXCELu, ODBC a OLE DB

Správci připojení EXCEL, ODBC a OLE DB vyžadují, aby příkaz SQL jako značky parametrů používal otazníky (?) a jako názvy parametrů 0 nebo 1 číselné hodnoty. Pokud spustíte úlohu SQL pomocí správce připojení ODBC, název parametru, který se mapuje na první parametr v dotazu, má název 1; v opačném případě má parametr název 0. U dalších parametrů číselná hodnota názvu parametru označuje parametr v příkazu SQL, na který se název parametru mapuje. Například parametr s názvem 3 se mapuje na třetí parametr, který je reprezentován třetím otazníkem (?) v příkazu SQL.

Aby bylo možné zadat hodnoty parametrů, proměnné se mapují na názvy parametrů a úloha Execute SQL používá k načtení hodnot z proměnných do parametrů pořadovou hodnotu názvu parametru.

V závislosti na poskytovateli, který správce připojení používá, nemusí být některé datové typy OLE DB podporovány. Například ovladač Excelu rozpozná pouze omezenou sadu datových typů. Další informace o chování poskytovatele Jet s ovladačem Aplikace Excel naleznete v tématu Zdroj aplikace Excel.

Použití parametrů se Správci připojení OLE DB

Když úloha Execute SQL používá správce připojení OLE DB, je k dispozici vlastnost úlohy BypassPrepare. Tuto vlastnost byste měli nastavit na hodnotu true , pokud úloha Execute SQL používá příkazy SQL s parametry.

Pokud používáte správce připojení OLE DB, nelze použít parametrizované poddotazy, protože spuštění úlohy SQL nemůže odvodit informace o parametrech prostřednictvím zprostředkovatele OLE DB. Výraz však můžete použít ke zřetězení hodnot parametrů do řetězce dotazu a k nastavení Vlastnosti SqlStatementSource úkolu.

Použití parametrů s datovými typy data a času

Použití parametrů data a času s ADO.NET a ADO Connection Managers

Při čtení dat typů SQL Serveru, time a datetimeoffset, má úloha Execute SQL, která používá správce připojení ADO.NET nebo ADO, následující dodatečné požadavky:

  • Pro časová data vyžaduje správce připojení ADO.NET, aby tato data byla uložena v parametru, jehož typ parametru je Input nebo Output a jehož datový typ je řetězec.

  • U dat datetimeoffset vyžaduje správce připojení ADO.NET, aby tato data byla uložena v jednom z následujících parametrů:

    • Parametr, jehož typ parametru je Input a jehož datový typ je řetězec.

    • Parametr, jehož typ parametru je Output nebo ReturnValue a jehož datový typ je datetimeoffset, string nebo datetime2. Pokud vyberete parametr, jehož datový typ je řetězec nebo datetime2, služba Integration Services převede data na řetězec nebo datetime2.

  • Správce připojení ADO vyžaduje, aby data time nebo datetimeoffset byla uložena v parametru, jehož typ parametru je Input nebo Output a jehož datový typ je adVarWchar.

Další informace o datových typech SQL Serveru a o tom, jak se mapují na datové typy integračních služeb, najdete v tématu Datové typy (Transact-SQL) a datové typy integračních služeb.

Použití parametrů data a času se správci připojení OLE DB

Při použití správce připojení OLE DB má úloha Execute SQL specifické požadavky na úložiště pro data datových typů SQL Serveru, datum, čas, datetime, datetime2 a datetimeoffset. Tato data musíte uložit v jednom z následujících typů parametrů:

  • Vstupní parametr datového typu NVARCHAR.

  • Výstupní parametr s příslušným datovým typem, jak je uvedeno v následující tabulce.

    Typ výstupního parametru Datový typ Datum
    DBDATE date
    DBTIME2 time
    DBTIMESTAMP datetime, datetime2
    DBTIMESTAMPOFFSET datetimeoffset

Pokud data nejsou uložená v příslušném vstupním nebo výstupním parametru, balíček selže.

Použití parametrů data a času v rámci správců připojení ODBC

Při použití správce připojení ODBC má úloha Execute SQL specifické požadavky na úložiště pro data s jedním z datových typů SQL Serveru, date, time, datetime, datetime2 nebo datetimeoffset. Tato data musíte uložit v jednom z následujících typů parametrů:

  • Vstupní parametr typu dat SQL_WVARCHAR

  • Výstupní parametr s příslušným datovým typem, jak je uvedeno v následující tabulce.

    Typ výstupního parametru Datový typ Datum
    SQL_DATE date
    SQL_SS_TIME2 time
    SQL_TYPE_TIMESTAMP

    -or-

    SQL_TIMESTAMP
    datetime, datetime2
    SQL_SS_TIMESTAMPOFFSET datetimeoffset

Pokud data nejsou uložená v příslušném vstupním nebo výstupním parametru, balíček selže.

Použití parametrů v klauzulích WHERE

Příkazy SELECT, INSERT, UPDATE a DELETE často obsahují klauzule WHERE k určení filtrů, které definují podmínky jednotlivých řádků ve zdrojových tabulkách, aby bylo možné kvalifikovat pro příkaz SQL. Parametry poskytují hodnoty filtru v klauzulích WHERE.

Značky parametrů můžete použít k dynamickému poskytování hodnot parametrů. Pravidla, pro které značky parametrů a názvy parametrů lze použít v příkazu SQL, závisí na typu správce připojení, který používá Execute SQL.

Následující tabulka uvádí příklady příkazu SELECT podle typu správce připojení. Příkazy INSERT, UPDATE a DELETE jsou podobné. V příkladech se používá funkce SELECT k vrácení produktů z tabulky Product (Produkt), ve AdventureWorks2025 které je IDproduktu větší než a menší než hodnoty určené dvěma parametry.

Typ připojení Syntaxe SELECT
EXCEL, ODBC a OLEDB SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
rozhraní ADO SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
ADO.NET SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID AND ProductID < @parmMaxProductID

Příklady by vyžadovaly parametry, které mají následující názvy:

  • Správci připojení EXCEL a OLED DB používají názvy parametrů 0 a 1. Typ připojení ODBC používá 1 a 2.

  • Typ připojení ADO může použít libovolný dva názvy parametrů, například Parametry1 a Param2, ale parametry musí být namapovány podle jejich řadové pozice v seznamu parametrů.

  • Typ připojení ADO.NET používá názvy parametrů @parmMinProductID a @parmMaxProductID.

Použití parametrů s uloženými procedurami

Příkazy SQL, které spouštějí uložené procedury, můžou také použít mapování parametrů. Pravidla pro použití značek parametrů a názvů parametrů závisí na typu správce připojení, který používá Execute SQL, stejně jako pravidla pro parametrizované dotazy.

Následující tabulka uvádí příklady příkazu EXEC podle typu správce připojení. Příklady spouští uspGetBillOfMaterials uloženou proceduru v AdventureWorks2025. Uložená procedura používá @StartProductID@CheckDatevstupní parametry.

Typ připojení Syntaxe EXEC
EXCEL a OLEDB EXEC uspGetBillOfMaterials ?, ?
rozhraní ODBC {call uspGetBillOfMaterials(?, ?)}

Další informace o syntaxi volání ODBC naleznete v tématu Parametry procedury, v odkazech programátora ODBC v knihovně MSDN.
rozhraní ADO Pokud je IsQueryStoredProcedure nastavená na False, EXEC uspGetBillOfMaterials ?, ?

Pokud je IsQueryStoredProcedure nastavena na True, uspGetBillOfMaterials
ADO.NET Pokud je IsQueryStoredProcedure nastavená na False, EXEC uspGetBillOfMaterials @StartProductID, @CheckDate

Pokud je IsQueryStoredProcedure nastavená na true, uspGetBillOfMaterials

Pokud chcete použít výstupní parametry, syntaxe vyžaduje, aby klíčové slovo OUTPUT sledovalo každou značku parametru. Například následující syntaxe výstupního parametru je správná: EXEC myStoredProcedure ? OUTPUT.

Další informace o použití vstupních a výstupních parametrů s Transact-SQL uloženými procedurami naleznete v tématu EXECUTE (Transact-SQL).

Mapování parametrů dotazu na proměnné

Tato část popisuje použití parametrizovaného příkazu SQL v úloze Execute SQL a vytváření mapování mezi proměnnými a parametry v příkazu SQL.

  1. V nástrojích SQL Server Data Tools (SSDT) otevřete balíček Integrační služby, se kterým chcete pracovat.

  2. V Průzkumníku řešení poklikáním otevřete balíček.

  3. Klikněte na kartu Tok řízení .

  4. Pokud balíček ještě neobsahuje úlohu Execute SQL, přidejte ji do toku řízení balíčku. Další informace najdete v tématu Přidání nebo odstranění úlohy nebo kontejneru v toku řízení.

  5. Dvakrát klikněte na úlohu Execute SQL.

  6. Zadejte parametrizovaný příkaz SQL jedním z následujících způsobů:

    • Použijte přímý vstup a zadejte příkaz SQL ve vlastnosti SQLStatement.

    • Použijte přímý vstup, klikněte na příkaz Sestavit dotaz a pak vytvořte příkaz SQL pomocí grafických nástrojů, které Tvůrce dotazů poskytuje.

    • Použijte připojení k souboru a poté odkazujte na soubor, který obsahuje příkaz SQL.

    • Použijte proměnnou a poté odkažte na proměnnou, která obsahuje příkaz SQL.

    Značky parametrů, které použijete v parametrizovaných příkazech SQL, závisí na typu připojení, který používá úloha Execute SQL.

    Typ připojení Značka parametru
    rozhraní ADO ?
    ADO.NET a SQLMOBILE @<název parametru>
    rozhraní ODBC ?
    EXCEL a OLE DB ?

    Následující tabulka uvádí příklady příkazu SELECT podle typu správce připojení. Parametry poskytují hodnoty filtru v klauzulích WHERE. V příkladech se používá funkce SELECT k vrácení produktů z tabulky Product (Produkt), ve AdventureWorks2025 které je IDproduktu větší než a menší než hodnoty určené dvěma parametry.

    Typ připojení Syntaxe SELECT
    EXCEL, ODBC a OLEDB SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
    rozhraní ADO SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
    ADO.NET SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID AND ProductID < @parmMaxProductID
  7. Klikněte na mapování parametrů.

  8. Chcete-li přidat mapování parametrů, klepněte na tlačítko Přidat.

  9. Do pole Název parametru zadejte název.

    Názvy parametrů, které použijete, závisí na typu připojení, který používá úloha Execute SQL.

    Typ připojení Název parametru
    rozhraní ADO Param1, Param2, ...
    ADO.NET a SQLMOBILE @<název parametru>
    rozhraní ODBC 1, 2, 3, ...
    EXCEL a OLE DB 0, 1, 2, 3, ...
  10. V seznamu Název proměnné vyberte proměnnou. Další informace najdete v tématu Přidání, odstranění, změna rozsahu User-Defined proměnné v balíčku.

  11. V seznamu Směr určete, jestli je parametr vstupem, výstupem nebo návratovou hodnotou.

  12. V seznamu Datový typ nastavte datový typ parametru.

    Důležité

    Datový typ parametru musí být kompatibilní s datovým typem proměnné.

  13. Opakujte kroky 8 až 11 pro každý parametr v příkazu SQL.

    Důležité

    Pořadí mapování parametrů musí být stejné jako pořadí, ve kterém se parametry zobrazují v příkazu SQL.

  14. Klikněte na OK.

Získání hodnot návratových kódů

Uložená procedura může vrátit celočíselnou hodnotu označovanou jako návratový kód, který označuje stav spuštění procedury. Chcete-li implementovat návratové kódy v úloze Execute SQL, použijte parametry typu ReturnValue .

Následující tabulka uvádí příklady příkazů EXEC, které implementují návratové kódy, podle typu připojení. Všechny příklady používají vstupní parametr. Pravidla pro použití značek parametrů a názvů parametrů jsou stejná pro všechny typy parametrů– Input, Output a ReturnValue.

Některá syntaxe nepodporuje literály parametrů. V takovém případě je nutné zadat hodnotu parametru pomocí proměnné.

Typ připojení Syntaxe EXEC
EXCEL a OLEDB EXEC ? = myStoredProcedure 1
rozhraní ODBC {? = call myStoredProcedure(1)}

Další informace o syntaxi volání ODBC naleznete v tématu Parametry procedury, v odkazech programátora ODBC v knihovně MSDN.
rozhraní ADO Pokud je IsQueryStoreProcedure nastavená na False, EXEC ? = myStoredProcedure 1

Pokud je IsQueryStoreProcedure nastavena na True, myStoredProcedure
ADO.NET IsQueryStoreProcedure je nastaveno na True.

myStoredProcedure

V syntaxi uvedené v předchozí tabulce používá úloha Execute SQL typ zdroje Direct Input ke spuštění uložené procedury. Úloha Execute SQL může také použít typ zdroje File Connection pro spuštění uložené procedury. Bez ohledu na to, jestli úloha Execute SQL používá typ zdroje přímého vstupu nebo připojení k souboru , použijte parametr typu ReturnValue k implementaci návratového kódu.

Další informace o použití návratových kódů s Transact-SQL uloženými procedurami naleznete v tématu RETURN (Transact-SQL).

Sady výsledků ve spuštěné úloze SQL

V balíčku integrační služby závisí na typu příkazu SQL, který úloha používá, zda je vrácena sada výsledků do úlohy Execute SQL. Například příkaz SELECT obvykle vrací sadu výsledků, ale příkaz INSERT ne.

Sada výsledků se také liší podle příkazu SQL. Sada výsledků z příkazu SELECT může například obsahovat nula řádků, jeden řádek nebo mnoho řádků. Sada výsledků z příkazu SELECT, který vrací počet nebo součet, však obsahuje pouze jeden řádek.

Práce se sadami výsledků v úloze Execute SQL je více než jen znalost, zda příkaz SQL vrací sadu výsledků a to, co tato sada výsledků obsahuje. Existují další požadavky na použití a pokyny k úspěšnému použití sad výsledků v úloze Spustit SQL. Zbývající část tohoto tématu popisuje tyto požadavky a pokyny k používání:

Zadání typu sady výsledků

Úloha Execute SQL podporuje následující typy sad výsledků:

  • Sada výsledků None se používá, když dotaz nevrátí žádné výsledky. Tato sada výsledků se například používá pro dotazy, které přidávají, mění a odstraňují záznamy v tabulce.

  • Sada výsledků s jedním řádkem se používá, když dotaz vrátí pouze jeden řádek. Tato sada výsledků se například používá pro příkaz SELECT, který vrátí počet nebo součet.

  • Úplná sada výsledků se používá, když dotaz vrátí více řádků. Tato sada výsledků se například používá pro příkaz SELECT, který načte všechny řádky v tabulce.

  • Sada výsledků XML se používá, když dotaz vrátí sadu výsledků ve formátu XML. Tato sada výsledků se například používá pro příkaz SELECT, který obsahuje klauzuli FOR XML.

Pokud úloha Execute SQL používá sadu výsledků úplné sady výsledků a dotaz vrátí více sad řádků, vrátí úloha pouze první sadu řádků. Pokud tato sada řádků vygeneruje chybu, úloha hlásí chybu. Pokud jiné sady řádků generují chyby, úloha je neohlásí.

Naplnit proměnnou sadou výsledků

Sadu výsledků, kterou dotaz vrátí, můžete svázat s uživatelsky definovanou proměnnou, pokud je typ sady výsledků jeden řádek, sada řádků nebo XML.

Pokud je typ sady výsledků Jeden řádek, můžete vytvořit vazbu sloupce v návratovém výsledku na proměnnou pomocí názvu sloupce jako názvu sady výsledků nebo můžete jako název sady výsledků použít pořadové umístění sloupce v seznamu sloupců. Například název sady výsledků dotazu SELECT Color FROM Production.Product WHERE ProductID = ? může být Color nebo 0. Pokud dotaz vrátí více sloupců a chcete získat přístup k hodnotám ve všech sloupcích, musíte každý sloupec svázat s jinou proměnnou. Pokud namapujete sloupce na proměnné pomocí čísel jako názvů sad výsledků, budou čísla odrážet pořadí, ve kterém se sloupce zobrazí v seznamu sloupců dotazu. Například v dotazu SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?použijete hodnotu 0 pro sloupec Barva a 1 pro sloupec ListPrice . Možnost použít název sloupce jako název sady výsledků závisí na poskytovateli, kterého je úkol nakonfigurován pro použití. Ne všichni poskytovatelé zpřístupní názvy sloupců.

Některé dotazy, které vracejí jednu hodnotu, nemusí obsahovat názvy sloupců. Příkaz například SELECT COUNT (*) FROM Production.Product nevrátí žádný název sloupce. K návratovém výsledku se dostanete pomocí pořadové pozice 0 jako názvu výsledku. Pokud chcete získat přístup k vráceným výsledkům podle názvu sloupce, musí dotaz obsahovat klauzuli AS s názvem aliasu, aby poskytl název sloupce. SELECT COUNT (*)AS CountOfProduct FROM Production.ProductPříkaz poskytuje sloupec CountOfProduct. K návratovém sloupci výsledku pak můžete získat přístup pomocí názvu sloupce CountOfProduct nebo pořadové pozice 0.

Pokud je typ sady výsledků Úplná sada výsledků nebo XML, musíte jako název sady výsledků použít hodnotu 0.

Když namapujete proměnnou na sadu výsledků s typem sady výsledků s jedním řádkem , musí mít proměnná datový typ, který je kompatibilní s datovým typem sloupce, který sada výsledků obsahuje. Například sada výsledků obsahující sloupec s datovým typem String nemůže mapovat na proměnnou s číselným datovým typem. Když nastavíte TypeConversionMode vlastnost Povoleno, execute SQL Task se pokusí převést výstupní parametr a výsledky dotazu na datový typ proměnné, ke kterým jsou výsledky přiřazeny.

Sada výsledků XML se může mapovat pouze na proměnnou s datovým typem String nebo Object . Pokud má proměnná datový typ String , úloha Execute SQL vrátí řetězec a zdroj XML může využívat data XML. Pokud má proměnná datový typ Object , vrátí úloha Execute SQL objektový model (DOM).

Úplná sada výsledků musí být mapovat na proměnnou datového typu Objekt. Vrácený výsledek je objekt sady řádků. Kontejner smyčky Foreach můžete použít k extrahování hodnot řádků tabulky uložených v proměnné objektu do proměnných balíčku a následnému zápisu dat uložených v proměnných balíčků do souboru pomocí úlohy skriptu. Ukázku toho, jak to provést pomocí kontejneru smyčky Foreach a úlohy skriptu.

Následující tabulka shrnuje datové typy proměnných, které lze mapovat na sady výsledků.

Typ sady výsledků Datový typ proměnné Typ objektu
Jeden řádek Libovolný typ, který je kompatibilní se sloupcem typu v sadě výsledků. Není relevantní
Úplná sada výsledků Objekt Pokud úloha používá nativní správce připojení, včetně správců připojení ADO, OLE DB, Excel a ODBC, vrácený objekt je sada záznamů ADO.

Pokud úloha používá správce spravovaného připojení, například správce připojení ADO.NET, vrácený objekt je System.Data.DataSet.

K přístupu k objektu System.Data.DataSet můžete použít úlohu Script, jak je znázorněno v následujícím příkladu.

Dim dt As Data.DataTable

Dim ds As Data.DataSet = CType(Dts.Variables("Recordset").Value, DataSet) dt = ds.Tables(0)
jazyk XML Řetězec Řetězec
jazyk XML Objekt Pokud úloha používá nativní správce připojení, včetně správců připojení ADO, OLE DB, Excel a ODBC, vrácený objekt je MSXML6. IXMLDOMDocument.

Pokud úloha používá správce spravovaného připojení, například správce připojení ADO.NET, vrácený objekt je System.Xml.XmlDocument.

Proměnnou lze definovat v oboru úlohy Execute SQL nebo balíčku. Pokud má proměnná obor balíčku, je sada výsledků k dispozici pro další úlohy a kontejnery v rámci balíčku a je k dispozici pro všechny balíčky spouštěné úlohou Execute Package nebo Execute DTS 2000 Package tasks.

Když namapujete proměnnou na sadu výsledků Single row, hodnoty, které nejsou řetězci a které příkaz SQL vrátí, se převedou na řetězce, pokud jsou splněny následující podmínky:

  • Vlastnost TypeConversionMode je nastavena na hodnotu true. Hodnotu vlastnosti nastavíte v okně Vlastnosti nebo pomocí Editoru úloh Execute SQL.

  • Převod nebude mít za následek zkrácení dat.

Mapování sad výsledků na proměnné v úloze Execute SQL

Tato část popisuje, jak vytvořit mapování mezi sadou výsledků a proměnnou v úloze Execute SQL. Mapování sady výsledků na proměnnou zpřístupňuje sadu výsledků jiným prvkům balíčku. Například skript v úloze Skript může přečíst proměnnou a pak použít hodnoty ze sady výsledků nebo zdroj XML může využívat sadu výsledků uloženou v proměnné. Pokud je sada výsledků vygenerována nadřazeným balíčkem, může být sada výsledků zpřístupněna podřízenému balíčku zavoláním úlohy Execute Package tím, že mapováním vyplněné výsledky na proměnnou v nadřazeném balíčku, a poté v podřízeném balíčku vytvoří konfiguraci nadřazené proměnné balíčku pro uložení hodnoty této nadřazené proměnné.

  1. V nástrojích SQL Server Data Tools (SSDT) otevřete projekt Integrační služby, který obsahuje požadovaný balíček.

  2. V Průzkumníku řešení poklikáním otevřete balíček.

  3. Klikněte na kartu Tok řízení .

  4. Pokud balíček ještě neobsahuje úlohu Execute SQL, přidejte ji do toku řízení balíčku. Další informace najdete v tématu Přidání nebo odstranění úlohy nebo kontejneru v toku řízení.

  5. Dvakrát klikněte na úlohu Execute SQL.

  6. V dialogovém okně Spustit editor úloh SQL na stránce Obecné vyberte jeden řádek, úplnou sadu výsledků nebo typ sady výsledků XML .

  7. Klikněte na Sadu výsledků.

  8. Chcete-li přidat mapování sady výsledků, klepněte na tlačítko Přidat.

  9. V seznamu Název proměnných vyberte proměnnou nebo vytvořte novou proměnnou. Další informace najdete v tématu Přidání, odstranění, změna rozsahu User-Defined proměnné v balíčku.

  10. V seznamu Název výsledku volitelně upravte název sady výsledků.

    Obecně můžete jako název sady výsledků použít název sloupce nebo jako sadu výsledků použít pořadové umístění sloupce v seznamu sloupců. Možnost použít název sloupce jako název sady výsledků závisí na poskytovateli, který úkol používá ve své konfiguraci. Ne všichni poskytovatelé zpřístupní názvy sloupců.

  11. Klikněte na OK.

Řešení potíží se spuštěním úlohy SQL

Můžete protokolovat volání, která provádí úloha Execute SQL externím poskytovatelům dat. Tuto funkci protokolování můžete použít k řešení potíží s příkazy SQL, které spouští úloha Spustit SQL. Pokud chcete protokolovat volání, která provádí úloha Execute SQL externím poskytovatelům dat, povolte protokolování balíčku a vyberte diagnostickou událost na úrovni balíčku. Další informace naleznete v tématu Nástroje pro řešení potíží pro spuštění balíčku.

Někdy příkaz SQL nebo uložená procedura vrací více sad výsledků. Tyto sady výsledků zahrnují nejen sady řádků, které jsou výsledkem dotazů SELECT , ale jediné hodnoty, které jsou výsledkem chyb příkazů RAISERROR nebo PRINT . Zda úloha ignoruje chyby ve výsledkových sadách, které se objeví po první výsledkové sadě, závisí na typu použitého správce připojení.

  • Pokud používáte správce připojení OLE DB a ADO, úloha ignoruje sady výsledků, ke kterým dochází po první sadě výsledků. Proto u těchto správců připojení úloha ignoruje chybu vrácenou příkazem SQL nebo uloženou procedurou, pokud chyba není součástí první sady výsledků.

  • Pokud používáte rozhraní ODBC a ADO.NET správce připojení, úloha neignoruje sady výsledků, ke kterým dochází po první sadě výsledků. U těchto správců připojení úloha selže s chybou, pokud sada výsledků kromě první sady výsledků obsahuje chybu.

Vlastní položky protokolu

Následující tabulka popisuje vlastní záznam protokolu pro úlohu Execute SQL. Další informace naleznete v tématu Integrace služeb (SSIS) protokolování.

Položka protokolu Description
ExecuteSQLExecutingQuery Poskytuje informace o fázích provádění příkazu SQL. Položky protokolu se zapíšou, když úloha získá připojení k databázi, když úloha začne připravovat příkaz SQL a po dokončení spuštění příkazu SQL. Položka protokolu pro fázi přípravy obsahuje příkaz SQL, který úloha používá.