Köra SQL-uppgift

gäller för:SQL Server SSIS Integration Runtime i Azure Data Factory

SQL-uppgiften Kör SQL-instruktioner eller lagrade procedurer från ett paket. Uppgiften kan innehålla antingen en enda SQL-instruktion eller flera SQL-instruktioner som körs sekventiellt. Du kan använda SQL-aktiviteten Kör i följande syfte:

  • Trunkera en tabell eller vy som förberedelse för att infoga data.

  • Skapa, ändra och ta bort databasobjekt som tabeller och vyer.

  • Återskapa fakta- och dimensionstabeller innan du läser in data i dem.

  • Kör lagrade procedurer. Om SQL-instruktionen anropar en lagrad procedur som returnerar resultat från en tillfällig tabell använder du alternativet WITH RESULT SETS för att definiera metadata för resultatuppsättningen.

  • Spara raduppsättningen som returneras från en fråga i en variabel.

Utför SQL-uppgift kan användas i kombination med Foreach-loop och For Loop-container för att köra flera SQL-instruktioner. Dessa containrar implementerar upprepade kontrollflöden i ett paket och de kan köra SQL-uppgiften upprepade gånger. Om du till exempel använder Foreach Loop-containern kan ett paket räkna upp filer i en mapp och köra en Execute SQL-uppgift upprepade gånger för att köra SQL-instruktionen som lagras i varje fil.

Anslut till en datakälla

SQL-aktiviteten Kör kan använda olika typer av anslutningshanterare för att ansluta till datakällan där den exekverar SQL-instruktionen eller den lagrade proceduren. Uppgiften kan använda anslutningstyperna som anges i följande tabell.

Anslutningstyp Anslutningshanteraren
Excel Anslutningshanteraren för Excel
OLE DB OLE DB-anslutningshanteraren
ODBC ODBC-anslutningshanteraren
ADO Anslutningshanteraren för ADO
ADO.NET ADO.NET Anslutningshanteraren
SQLMOBILE Anslutningshanteraren för SQL Server Compact Edition

Skapa SQL-instruktioner

Källan till SQL-uttrycken som används av den här aktiviteten kan vara en aktivitetsegenskap som innehåller en -instruktion, en anslutning till en fil som innehåller en eller flera instruktioner eller namnet på en variabel som innehåller en -instruktion. SQL-uttrycken måste skrivas på dialekten för källdatabashanteringssystemet (DBMS). Mer information finns i SSIS-frågor (Integration Services).

Om SQL-uttrycken lagras i en fil använder uppgiften en Filanslutningshanterare för att ansluta till filen. Mer information finns i Filanslutningshanteraren.

I SSIS Designer kan du använda dialogrutan Kör SQL-uppgiftsredigeraren för att skriva SQL-instruktioner, eller använda Query Builder, ett grafiskt användargränssnitt för att skapa SQL-frågor.

Anmärkning

Giltiga SQL-instruktioner som skrivits utanför Execute SQL-uppgiften kanske inte parsas framgångsrikt av Execute SQL-uppgiften.

Anmärkning

Kör SQL-uppgiften använder uppräkningsvärdet RecognizeAll ParseMode. Mer information finns i ManagedBatchParser-namnområdet.

Skicka flera frågor i en batch

Om du inkluderar flera instruktioner i en Execute SQL-uppgift kan du gruppera dem och köra dem som en batch. Om du vill signalera slutet på en batch använder du GO-kommandot. Alla SQL-instruktioner mellan två GO-kommandon skickas i en batch till OLE DB-providern som ska köras. SQL-kommandot kan innehålla flera batchar avgränsade med GO-kommandon.

Det finns begränsningar för vilka typer av SQL-instruktioner som du kan gruppera i en batch. Mer information finns i Batchar med uttalanden.

Om SQL-aktiviteten 'Kör' kör en sats med SQL-instruktioner gäller följande regler för satsen:

  • Endast en -instruktion kan returnera en resultatuppsättning och det måste vara den första instruktionen i batchen.

  • Om resultatuppsättningen använder resultatbindningar måste frågorna returnera samma antal kolumner. Om frågorna returnerar ett annat antal kolumner misslyckas uppgiften. Men även om uppgiften misslyckas kan de frågor som körs, till exempel DELETE- eller INSERT-frågor, lyckas.

  • Om resultatbindningarna använder kolumnnamn måste frågan returnera kolumner som har samma namn som de resultatuppsättningsnamn som används i aktiviteten. Om kolumnerna saknas misslyckas uppgiften.

  • Om aktiviteten använder parameterbindning måste alla frågor i batchen ha samma antal och typer av parametrar.

Köra parametriserade SQL-kommandon

SQL-instruktioner och lagrade procedurer använder ofta indataparametrar, utdataparametrar och returkoder. Sql-aktiviteten Execute stöder parametertyperna Input, Output och ReturnValue . Du använder indatatypen för indataparametrar, Utdata för utdataparametrar och ReturnValue för returkoder.

Anmärkning

Du kan endast använda parametrar i en Execute SQL-uppgift om dataprovidern stöder dem.

Ange en resultatuppsättningstyp

Beroende på typen av SQL-kommando kan en resultatuppsättning returneras till Kör SQL-aktiviteten. En SELECT-instruktion returnerar till exempel vanligtvis en resultatuppsättning, men det gör inte en INSERT-instruktion. Resultatuppsättningen från en SELECT-instruktion kan innehålla noll rader, en rad eller många rader. Lagrade procedurer kan också returnera ett heltalsvärde, som kallas returkod, som anger körningsstatus för proceduren. I så fall består resultatuppsättningen av en enda rad.

Konfigurera aktiviteten Kör SQL

Du kan konfigurera Kör SQL-aktiviteten på följande sätt:

  • Ange vilken typ av anslutningshanterare som ska användas för att ansluta till en databas.

  • Ange vilken typ av resultatuppsättning som SQL-instruktionen returnerar.

  • Ange en tidsgräns för SQL-uttrycken.

  • Ange källan för SQL-instruktionen.

  • Ange om aktiviteten hoppar över förberedelsefasen för SQL-instruktionen.

  • Om du använder anslutningstypen ADO måste du ange om SQL-instruktionen är en lagrad procedur. För andra anslutningstyper är den här egenskapen skrivskyddad och dess värde är alltid false.

Du kan ange egenskaper programmatiskt eller via SSIS Designer.

Allmän sida – Köra SQL-uppgiftsredigeraren

Använd sidan Allmänt i dialogrutan Kör SQL-uppgiftsredigeraren för att konfigurera sql-aktiviteten Kör och ange SQL-instruktionen som aktiviteten kör.

Mer information om Transact-SQL frågespråk finns iTransact-SQL Reference (Database Engine).

Statiska alternativ

Namn
Ange ett unikt namn för körningen av SQL-uppgiften i arbetsflödet. Namnet som anges visas i SSIS Designer.

Beskrivning
Beskriv Kör SQL-uppgiften. Vi rekommenderar att du gör paketen självdokumenterande och enklare att underhålla genom att beskriva uppgiften med avseende på dess syfte.

Timeout
Ange det maximala antalet sekunder som aktiviteten ska köras innan tidsgränsen överskrids. Värdet 0 anger en oändlig tid. Standardvärdet är 0.

Anmärkning

Lagrade procedurer går inte ut över tidsgränsen om de emulerar viloläge genom att ge tid för anslutningar att göras och transaktioner att slutföras som överstiger det antal sekunder som anges av TimeOut. Lagrade procedurer som kör frågor omfattas dock alltid av den tidsbegränsning som anges av TimeOut.

CodePage
Ange den kodsida som ska användas vid översättning av Unicode-värden i variabler. Standardvärdet är kodsidan på den lokala datorn.

Anmärkning

När aktiviteten Kör SQL använder en ADO- eller ODBC-anslutningshanterare är egenskapen CodePage ej tillgänglig. Om din lösning kräver användning av en kodsida använder du en OLE DB-anslutningshanterare eller en ADO.NET-anslutningshanterare med uppgiften Kör SQL.

TypeConversionMode
När du ställer in den här egenskapen på Tillåten försöker körningen av SQL-aktiviteten konvertera utdataparametern och frågeresultatet till datatypen för variabeln som resultaten tilldelas till. Detta gäller för resultatuppsättningstypen Enskild rad .

ResultSet
Ange den resultattyp som förväntas av SQL-instruktionen som körs. Välj bland Enskild rad, Fullständig resultatuppsättning, XML eller Ingen.

Typ av anslutning
Välj vilken typ av anslutningshanterare som ska användas för att ansluta till datakällan. Tillgängliga anslutningstyper är OLE DB, ODBC, ADO, ADO.NET och SQLMOBILE.

Relaterade ämnen:OLE DB Connection Manager, ODBC Connection Manager, ADO Connection Manager, ADO.NET Connection Manager, SQL Server Compact Edition Connection Manager

Anslutning
Välj anslutningen från en lista över definierade anslutningshanterare. Om du vill skapa en ny anslutning väljer du <Ny anslutning...>.

SQLSourceType
Välj källtypen för SQL-instruktionen som uppgiften kör.

Beroende på vilken typ av anslutningshanterare som kör SQL-uppgift använder måste du använda specifika parametermarkörer i parameteriserade SQL-instruktioner.

Den här egenskapen innehåller alternativen i följande tabell.

Värde Description
Direktinmatning Ange källan till en Transact-SQL-instruktion. Om du väljer det här värdet visas det dynamiska alternativet SQLStatement.
Filanslutning Välj en fil som innehåller en Transact-SQL-instruktion. Om du anger det här alternativet visas det dynamiska alternativet FileConnection.
variabel Ange källan till en variabel som definierar Transact-SQL-instruktionen. Om du väljer det här värdet visas det dynamiska alternativet SourceVariable.

QueryIsStoredProcedure
Anger om den angivna SQL-instruktionen som ska köras är en lagrad procedur. Den här egenskapen är läs- och skrivbar endast om uppgiften använder ADO-anslutningshanteraren. Annars är egenskapen skrivskyddad och dess värde är false.

BypassPrepare
Ange om SQL-instruktionen är förberedd. true skips preparation; false förbereder SQL-instruktionen innan den körs. Det här alternativet är endast tillgängligt med OLE DB-anslutningar som stöder förberedelse.

Relaterade ämnen:Förberedd exekvering

Bläddra
Leta upp en fil som innehåller en SQL-instruktion med hjälp av dialogrutan Öppna . Välj en fil för att kopiera innehållet i filen som en SQL-instruktion till egenskapen SQLStatement .

Skapa fråga
Skapa en SQL-instruktion med hjälp av dialogrutan Query Builder , ett grafiskt verktyg som används för att skapa frågor. Det här alternativet är tillgängligt när alternativet SQLSourceType är inställt på Direktindata.

Parsa fråga
Verifiera syntaxen för SQL-instruktionen.

Dynamiska SQLSourceType-alternativ

SQLSourceType = Direkt inmatning

SQLStatement
Skriv SQL-instruktionen som ska köras i alternativrutan eller klicka på bågknappen (...) för att skriva SQL-instruktionen i dialogrutan Ange SQL-fråga eller klicka på Skapa fråga för att skriva instruktionen med hjälp av dialogrutan Query Builder .

Relaterade ämnen:Query Builder

SQLSourceType = Filanslutning

FileConnection
Välj en befintlig filanslutningshanterare eller klicka på <Ny anslutning...> för att skapa en ny anslutningshanterare.

relaterade ämnen:Filanslutningshanteraren, Redigeraren för filanslutningshanteraren

SQLSourceType = Variabel

SourceVariable
Välj en befintlig variabel eller klicka på <Ny variabel...> för att skapa en ny variabel.

Relaterade ämnen:Integration Services (SSIS)-variabler, Lägg till variabel

Parametermappningssida – Köra SQL-uppgiftsredigeraren

Använd sidan Parametermappning i dialogrutan Kör SQL-uppgiftsredigeraren för att mappa variabler till parametrar i SQL-instruktionen.

Options

Variabelnamn
När du har lagt till en parametermappning genom att klicka på Lägg till väljer du en system- eller användardefinierad variabel i listan eller klickar på <Ny variabel...> för att lägga till en ny variabel med hjälp av dialogrutan Lägg till variabel .

Relaterade ämnen:SSIS-variabler (Integration Services)

Riktning
Välj parameterns riktning. Mappa varje variabel till en indataparameter, utdataparameter eller en returkod.

Datatyp
Välj parameterns datatyp. Listan över tillgängliga datatyper är specifik för den provider som valts i anslutningshanteraren som används av uppgiften.

Parameternamn
Ange ett parameternamn.

Beroende på typen av anslutningshanterare som aktiviteten använder måste du använda tal eller parameternamn. Vissa typer av anslutningshanterare kräver att det första tecknet i parameternamnet är @-tecknet , specifika namn som @Param1 eller kolumnnamn som parameternamn.

Parameterstorlek
Ange storleken på parametrar som har variabel längd, till exempel strängar och binära fält.

Den här inställningen säkerställer att providern allokerar tillräckligt med utrymme för parametervärden med variabel längd.

Add
Klicka för att lägga till en parametermappning.

Remove
Välj en parametermappning i listan och klicka sedan på Ta bort.

Resultatuppsättningssida – Köra SQL-uppgiftsredigeraren

Använd sidan Resultatuppsättning i dialogrutan Kör SQL-uppgiftsredigeraren för att mappa resultatet av SQL-instruktionen till nya eller befintliga variabler. Alternativen i den här dialogrutan är inaktiverade om ResultSet på sidan Allmänt är inställt på Ingen.

Options

Resultatnamn
När du har klickat på Lägg till för att lägga till en mappning för resultatuppsättningar, anger du ett namn för resultatet. Beroende på resultatuppsättningstypen måste du använda specifika resultatnamn.

Om resultatuppsättningstypen är Enskild rad kan du använda antingen namnet på en kolumn som returneras av frågan eller talet som representerar positionen för en kolumn i kolumnlistan för en kolumn som returneras av frågan.

Om resultatuppsättningstypen är Fullständig resultatuppsättning eller XML måste du använda 0 som resultatuppsättningsnamn.

Variabelnamn
Mappa resultatuppsättningen till en variabel genom att välja en variabel eller klicka på <Ny variabel...> för att lägga till en ny variabel med hjälp av dialogrutan Lägg till variabel .

Add
Klicka för att lägga till en mappning för resultatuppsättningar.

Remove
Välj en resultatuppsättningsmappning i listan och klicka sedan på Ta bort.

Parametrar i utförande av SQL-uppgift

SQL-instruktioner och lagrade procedurer använder ofta indataparametrar, utdataparametrar och returkoder. I Integration Services stöder Execute SQL-uppgiften parametertyperna Input, Output och ReturnValue. Du använder indatatypen för indataparametrar, Utdata för utdataparametrar och ReturnValue för returkoder.

Anmärkning

Du kan endast använda parametrar i en Execute SQL-uppgift om dataprovidern stöder dem.

Parametrar i SQL-kommandon, inklusive frågor och lagrade procedurer, mappas till användardefinierade variabler som skapas inom omfånget för SQL-aktiviteten Kör, en överordnad container eller inom paketets omfång. Värdena för variabler kan anges vid designtillfället eller fyllas i dynamiskt vid körning. Du kan också mappa parametrar till systemvariabler. Mer information finns i Variabler för Integration Services (SSIS) och Systemvariabler.

Men att arbeta med parametrar och returkoder i en Execute SQL-uppgift är mer än att bara veta vilka parametertyper uppgiften stöder och hur dessa parametrar ska mappas. Det finns ytterligare användningskrav och riktlinjer för att använda parametrar och returkoder i SQL-aktiviteten Execute. Resten av det här avsnittet beskriver dessa användningskrav och riktlinjer:

Parameternamn och markörer

Beroende på vilken anslutningstyp som sql-aktiviteten kör används använder syntaxen för SQL-kommandot olika parametermarkörer. Till exempel kräver typen ADO.NET anslutningshanteraren att SQL-kommandot använder en parametermarkör i formatet @varParameter, medan OLE DB-anslutningstypen kräver parametermarkören frågetecken (?).

De namn som du kan använda som parameternamn i mappningarna mellan variabler och parametrar varierar också efter typ av anslutningshanterare. Till exempel använder ADO.NET-anslutningshanterartypen ett användardefinierat namn med ett @-prefix, medan OLE DB-anslutningshanterartypen kräver att du använder det numeriska värdet av ett 0-baserat index som parameternamn.

I följande tabell sammanfattas kraven för SQL-kommandon för typer av anslutningshanterare som Kör SQL-aktiviteten kan använda.

Anslutningstyp Parametermarkör Parameternamn Exempel på SQL-kommando
ADO ? Param1, Param2, ... SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?
ADO.NET @<parameternamn> @<parameternamn> SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = @parmContactID
ODBC ? 1, 2, 3, ... SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?
EXCEL och OLE DB ? 0, 1, 2, 3, ... SELECT FirstName, LastName, Title FROM Person.Contact WHERE ContactID = ?

Använda parametrar med ADO.NET- och ADO-anslutningshanterare

ADO.NET och ADO-anslutningshanterare har specifika krav för SQL-kommandon som använder parametrar:

  • ADO.NET anslutningshanterare kräver att SQL-kommandot använder parameternamn som parametermarkörer. Det innebär att variabler kan mappas direkt till parametrar. Till exempel mappas variabeln @varName till parametern med namnet @parName och ger ett värde till parametern @parName.

  • ADO-anslutningshanterare kräver att SQL-kommandot använder frågetecken (?) som parametermarkörer. Du kan dock använda valfritt användardefinierat namn, förutom heltalsvärden, som parameternamn.

För att ange värden för parametrar mappas variabler till parameternamn. Sedan använder Execute SQL-uppgiften den ordnade positionen för parameternamnet i parameterlistan för att ladda värden från variabler till parametrar.

Använd parametrar med anslutningshanterare för Excel, ODBC och OLE DB

Anslutningshanterare för EXCEL, ODBC och OLE DB kräver att SQL-kommandot använder frågetecken (?) som parametermarkörer och 0-baserade eller 1-baserade numeriska värden som parameternamn. Om KÖR SQL-aktiviteten använder ODBC-anslutningshanteraren får parameternamnet som mappar till den första parametern i frågan namnet 1; annars heter parametern 0. För efterföljande parametrar anger det numeriska värdet för parameternamnet parametern i SQL-kommandot som parameternamnet mappar till. Parametern med namnet 3 mappar till den tredje parametern, vilket representeras av det tredje frågetecknet (?) i SQL-kommandot.

För att tilldela värden till parametrar mappas variabler till parameternamn och Execute SQL-uppgiften använder ordningstalet för parameternamnen för att läsa in värden från variabler till parametrar.

Beroende på vilken provider som anslutningshanteraren använder kan det hända att vissa OLE DB-datatyper inte stöds. Excel-drivrutinen känner till exempel bara igen en begränsad uppsättning datatyper. Mer information om jetproviderns beteende med Excel-drivrutinen finns i Excel-källa.

Använda parametrar med OLE DB-anslutningshanterare

När SQL-körningsaktiviteten använder OLE DB-anslutningshanteraren är egenskapen BypassPrepare tillgänglig för aktiviteten. Du bör ange den här egenskapen till true om SQL-aktiviteten Kör använder SQL-instruktioner med parametrar.

När du använder en OLE DB-anslutningshanterare kan du inte använda parametriserade underfrågor eftersom Execute SQL-uppgiften inte kan härleda parameterinformation genom OLE DB-leverantören. Du kan dock använda ett uttryck för att sammanfoga parametervärdena till frågesträngen och ange sqlstatementSource-egenskapen för uppgiften.

** Använd parametrar med datatyperna för datum och tid

Använd datum- och tidsparametrar med ADO.NET- och ADO-anslutningshanterare

När du läser data för SQL Server-typer, tid och datetimeoffset har en SQL-aktivitet som använder antingen en ADO.NET- eller ADO-anslutningshanterare följande ytterligare krav:

  • För tidsdata kräver en ADO.NET anslutningshanterare att dessa data lagras i en parameter vars parametertyp är Indata eller Utdata och vars datatyp är sträng.

  • För datetimeoffset-data kräver en ADO.NET anslutningshanterare att dessa data lagras i någon av följande parametrar:

    • En parameter vars parametertyp är Indata och vars datatyp är sträng.

    • En parameter vars parametertyp är Output eller ReturnValue och vars datatyp är datetimeoffset, string eller datetime2. Om du väljer en parameter vars datatyp är antingen sträng eller datetime2 konverterar Integration Services data till antingen sträng eller datetime2.

  • En ADO-anslutningshanterare kräver att time- eller datetimeoffset-data lagras i en parameter vars parametertyp är Indata eller Utdata och vars datatyp är adVarWchar.

Mer information om SQL Server-datatyper och hur de mappas till Integration Services-datatyper finns i Datatyper (Transact-SQL) och Datatyper för Integration Services.

Använda datum- och tidsparametrar med OLE DB-anslutningshanterare

När du använder en OLE DB-anslutningshanterare har en SQL-körningsuppgift specifika lagringskrav för data för SQL Server-datatyper, datum, tid, datetime, datetime2 och datetimeoffset. Du måste lagra dessa data i någon av följande parametertyper:

  • En indataparameter för NVARCHAR-datatypen.

  • En utdataparameter för med lämplig datatyp, enligt listan i följande tabell.

    Typ av utdataparameter Datumdatatyp
    DBDATE date
    DBTIME2 time
    DBTIMESTAMP datetime, datetime2
    DBTIMESTAMPOFFSET datetimeoffset

Om data inte lagras i lämplig indata- eller utdataparameter misslyckas paketet.

Använda datum- och tidsparametrar med ODBC-anslutningshanterare

När du använder en ODBC-anslutningshanterare har en Execute SQL-uppgift specifika lagringskrav för data med någon av SQL Server-datatyperna, datum, tid, datetime, datetime2 eller datetimeoffset. Du måste lagra dessa data i någon av följande parametertyper:

  • En indataparameter för datatypen SQL_WVARCHAR

  • En utdataparameter med lämplig datatyp enligt listan i följande tabell.

    Typ av utdataparameter Datumdatatyp
    SQL_DATE date
    SQL_SS_TIME2 time
    SQL_TYPE_TIMESTAMP

    -or-

    SQL_TIMESTAMP
    datetime, datetime2
    SQL_SS_TIMESTAMPOFFSET datetimeoffset

Om data inte lagras i lämplig indata- eller utdataparameter misslyckas paketet.

Använda parametrar i WHERE-satser

SELECT-, INSERT-, UPDATE- och DELETE-kommandon innehåller ofta WHERE-satser för att ange filter som definierar de villkor som varje rad i källtabellerna måste uppfylla för att kvalificera sig för ett SQL-kommando. Parametrarna anger filtervärdena i WHERE-satserna.

Du kan använda parametermarkörer för att dynamiskt ange parametervärden. Reglerna för vilka parametermarkörer och parameternamn som kan användas i SQL-instruktionen beror på vilken typ av anslutningshanterare Utför SQL använder sig av.

I följande tabell visas exempel på SELECT-kommandot efter typ av anslutningshanterare. Uttrycken INSERT, UPDATE och DELETE liknar dem. Exemplen använder SELECT för att returnera produkter från tabellen Produkt i AdventureWorks2025 som har ett ProductID som är större än och mindre än de värden som anges av två parametrar.

Anslutningstyp SELECT-syntax
EXCEL, ODBC och OLEDB SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
ADO SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
ADO.NET SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID AND ProductID < @parmMaxProductID

Exemplen skulle kräva parametrar som har följande namn:

  • Anslutningshanterare för EXCEL och OLED DB använder parameternamnen 0 och 1. ODBC-anslutningstypen använder 1 och 2.

  • Anslutningstypen ADO kan använda två parameternamn, till exempel Param1 och Param2, men parametrarna måste mappas med deras ordningstal i parameterlistan.

  • Anslutningstypen ADO.NET använder parameternamnen @parmMinProductID och @parmMaxProductID.

Använd parametrar med lagrade procedurer

SQL-kommandon som kör lagrade procedurer kan också använda parametermappning. Reglerna för hur du använder parametermarkörer och parameternamn beror på vilken typ av anslutningshanterare som kör SQL använder, precis som reglerna för parametriserade frågor.

I följande tabell visas exempel på EXEC-kommandot efter anslutningshanterarens typ. Exemplen kör den lagrade proceduren uspGetBillOfMaterials i AdventureWorks2025. Den lagrade proceduren använder parametrarna @StartProductID och @CheckDateindata .

Anslutningstyp EXEC-syntax
EXCEL och OLEDB EXEC uspGetBillOfMaterials ?, ?
ODBC {call uspGetBillOfMaterials(?, ?)}

Mer information om ODBC-anropssyntax finns i avsnittet Procedurparametrar i ODBC-programmerarens referens i MSDN-biblioteket.
ADO Om IsQueryStoredProcedure är inställt på False, EXEC uspGetBillOfMaterials ?, ?

Om IsQueryStoredProcedure är inställt på Sant, uspGetBillOfMaterials
ADO.NET Om IsQueryStoredProcedure är inställt på False, EXEC uspGetBillOfMaterials @StartProductID, @CheckDate

Om IsQueryStoredProcedure är inställt på Sant, uspGetBillOfMaterials

Om du vill använda utdataparametrar kräver syntaxen att nyckelordet OUTPUT följer varje parametermarkör. Följande syntax för utdataparametern är till exempel korrekt: EXEC myStoredProcedure ? OUTPUT.

Mer information om hur du använder indata- och utdataparametrar med Transact-SQL lagrade procedurer finns i EXECUTE (Transact-SQL).

Mappa frågeparametrar till variabler

Det här avsnittet beskriver hur du använder en parameteriserad SQL-instruktion i sql-aktiviteten Kör och skapar mappningar mellan variabler och parametrarna i SQL-instruktionen.

  1. I SQL Server Data Tools (SSDT) öppnar du det Integration Services-paket som du vill arbeta med.

  2. Dubbelklicka på paketet i Solution Explorer för att öppna det.

  3. Klicka på fliken Kontrollflöde .

  4. Om paketet inte redan innehåller en Execute SQL-uppgift lägger du till en i paketets kontrollflöde. Mer information finns i Lägga till eller ta bort en uppgift eller en container i ett kontrollflöde.

  5. Dubbelklicka på Kör SQL-uppgift.

  6. Ange ett parameteriserat SQL-kommando på något av följande sätt:

    • Använd direktindata och skriv SQL-kommandot i egenskapen SQLStatement.

    • Använd direktindata, klicka på Skapa fråga och skapa sedan ett SQL-kommando med hjälp av de grafiska verktyg som Query Builder tillhandahåller.

    • Använd en filanslutning och referera sedan till filen som innehåller SQL-kommandot.

    • Använd en variabel och referera sedan till variabeln som innehåller SQL-kommandot.

    Vilka parametermarkörer du använder i parametriserade SQL-instruktioner beror på vilken anslutningstyp sql-aktiviteten använder.

    Anslutningstyp Parametermarkör
    ADO ?
    ADO.NET och SQLMOBILE @<parameternamn>
    ODBC ?
    EXCEL och OLE DB ?

    I följande tabell visas exempel på SELECT-kommandot efter typ av anslutningshanterare. Parametrarna anger filtervärdena i WHERE-satserna. Exemplen använder SELECT för att returnera produkter från tabellen Produkt i AdventureWorks2025 som har ett ProductID som är större än och mindre än de värden som anges av två parametrar.

    Anslutningstyp SELECT-syntax
    EXCEL, ODBC och OLEDB SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
    ADO SELECT* FROM Production.Product WHERE ProductId > ? AND ProductID < ?
    ADO.NET SELECT* FROM Production.Product WHERE ProductId > @parmMinProductID AND ProductID < @parmMaxProductID
  7. Klicka på Parametermappning.

  8. Om du vill lägga till en parametermappning klickar du på Lägg till.

  9. Ange ett namn i rutan Parameternamn .

    De parameternamn som du använder beror på den anslutningstyp som sql-aktiviteten Kör använder.

    Anslutningstyp Parameternamn
    ADO Param1, Param2, ...
    ADO.NET och SQLMOBILE @<parameternamn>
    ODBC 1, 2, 3, ...
    EXCEL och OLE DB 0, 1, 2, 3, ...
  10. I listan Variabelnamn väljer du en variabel. Mer information finns i Lägg till, Ta bort, Ändra omfång för User-Defined variabel i ett paket.

  11. I listan Riktning anger du om parametern är en indata, ett utdata eller ett returvärde.

  12. I listan Datatyp ställer du in parameterns datatyp.

    Viktigt!

    Parameterns datatyp måste vara kompatibel med variabelns datatyp.

  13. Upprepa steg 8 till och med 11 för varje parameter i SQL-instruktionen.

    Viktigt!

    Ordningen på parametermappningar måste vara samma som i vilken ordning parametrarna visas i SQL-instruktionen.

  14. Klicka på OK.

Hämta värdena för returkoder

En lagrad procedur kan returnera ett heltalsvärde, som kallas returkod, för att ange körningsstatus för en procedur. Om du vill implementera returkoder i uppgiften Execute SQL använder du parametrar av typen ReturnValue.

I följande tabell visas efter anslutningstyp några exempel på EXEC-kommandon som implementerar returkoder. Alla exempel använder en indataparameter . Reglerna för hur du använder parametermarkörer och parameternamn är desamma för alla parametertyper-Indata, Utdata och ReturnValue.

Vissa syntaxer stöder inte parameterliteraler. I så fall måste du ange parametervärdet med hjälp av en variabel.

Anslutningstyp EXEC-syntax
EXCEL och OLEDB EXEC ? = myStoredProcedure 1
ODBC {? = call myStoredProcedure(1)}

Mer information om ODBC-anropssyntax finns i avsnittet Procedurparametrar i ODBC-programmerarens referens i MSDN-biblioteket.
ADO Om IsQueryStoreProcedure är inställt på False, EXEC ? = myStoredProcedure 1

Om IsQueryStoreProcedure är inställt på Sant, myStoredProcedure
ADO.NET Ange IsQueryStoreProcedure är inställt på Sant.

myStoredProcedure

I syntaxen som visas i föregående tabell använder sql-aktiviteten Kör källtypen Direktindata för att köra den lagrade proceduren. Uppgiften Köra SQL kan också använda källtyp Filanslutning för att köra en lagrad procedur. Oavsett om sql-aktiviteten Kör använder källtypen Direktindata eller Filanslutning använder du en parameter av typen ReturnValue för att implementera returkoden.

Mer information om hur du använder returkoder med Transact-SQL lagrade procedurer finns i RETURN (Transact-SQL).

Resultatuppsättningar i Execute SQL-uppgift

Om en resultatuppsättning returneras till uppgiften Execute SQL i ett Integration Services-paket beror det på vilken typ av SQL-kommando som uppgiften använder. En SELECT-instruktion returnerar till exempel vanligtvis en resultatuppsättning, men det gör inte en INSERT-instruktion.

Vad resultatuppsättningen innehåller varierar också med SQL-kommandot. Resultatuppsättningen från en SELECT-instruktion kan till exempel innehålla noll rader, en rad eller många rader. Resultatuppsättningen från en SELECT-instruktion som returnerar ett antal eller en summa innehåller dock bara en enskild rad.

Att arbeta med resultatuppsättningar i en Execute SQL-uppgift är mer än att bara veta om SQL-kommandot returnerar en resultatuppsättning och vad resultatuppsättningen innehåller. Det finns ytterligare användningskrav och riktlinjer för att använda resultatuppsättningar i SQL-aktiviteten Execute. Resten av det här avsnittet beskriver dessa användningskrav och riktlinjer:

Ange en resultatuppsättningstyp

Aktiviteten Kör SQL stöder följande typer av resultatuppsättningar:

  • Resultatuppsättningen Ingen används när frågan inte returnerar några resultat. Den här resultatuppsättningen används till exempel för frågor som lägger till, ändrar och tar bort poster i en tabell.

  • Resultatuppsättningen Enskild rad används när frågan bara returnerar en rad. Den här resultatuppsättningen används till exempel för en SELECT-instruktion som returnerar ett antal eller en summa.

  • Resultatuppsättningen Fullständig resultatuppsättning används när frågan returnerar flera rader. Den här resultatuppsättningen används till exempel för en SELECT-instruktion som hämtar alla rader i en tabell.

  • XML-resultatuppsättningen används när frågan returnerar en resultatuppsättning i ETT XML-format. Den här resultatuppsättningen används till exempel för en SELECT-instruktion som innehåller en FOR XML-sats.

Om aktiviteten Kör SQL använder Fullständig resultatuppsättning som resultatuppsättning och frågan returnerar flera raduppsättningar, returnerar aktiviteten endast den första raduppsättningen. Om den här raduppsättningen genererar ett fel rapporterar aktiviteten felet. Om andra raduppsättningar genererar fel rapporterar inte aktiviteten dem.

Fylla i en variabel med en resultatuppsättning

Du kan binda resultatuppsättningen som en fråga returnerar till en användardefinierad variabel, om resultatuppsättningstypen är en enskild rad, en raduppsättning eller XML.

Om resultatuppsättningstypen är Enskild rad kan du binda en kolumn i returresultatet till en variabel med hjälp av kolumnnamnet som resultatuppsättningsnamn, eller så kan du använda kolumnens ordningstal i kolumnlistan som resultatuppsättningsnamn. Resultatuppsättningens namn för frågan SELECT Color FROM Production.Product WHERE ProductID = ? kan till exempel vara Färg eller 0. Om frågan returnerar flera kolumner och du vill komma åt värdena i alla kolumner måste du binda varje kolumn till en annan variabel. Om du mappar kolumner till variabler med hjälp av tal som resultatuppsättningsnamn återspeglar talen i vilken ordning kolumnerna visas i kolumnlistan för frågan. I frågan SELECT Color, ListPrice, FROM Production.Product WHERE ProductID = ?använder du till exempel 0 för kolumnen Färg och 1 för kolumnen ListPrice . Möjligheten att använda ett kolumnnamn som namn på en resultatuppsättning beror på vilken provider som uppgiften är konfigurerad att använda. Alla leverantörer gör inte kolumnnamn tillgängliga.

Vissa frågor som returnerar ett enda värde kanske inte innehåller kolumnnamn. Instruktionen SELECT COUNT (*) FROM Production.Product returnerar till exempel inget kolumnnamn. Du kan komma åt returresultatet med ordningstalet 0 som resultatnamn. För att få åtkomst till returresultatet efter kolumnnamn måste frågan innehålla en AS-aliasnamnssats <> för att ange ett kolumnnamn. SELECT COUNT (*)AS CountOfProduct FROM Production.ProductUttalandet tillhandahåller kolumnen CountOfProduct. Du kan sedan komma åt returresultatkolumnen med kolumnnamnet CountOfProduct eller ordningstalet 0.

Om resultatuppsättningstypen är Fullständig resultatuppsättning eller XML måste du använda 0 som resultatuppsättningsnamn.

När du mappar en variabel till en resultatuppsättning med resultatuppsättningstypen Enskild rad måste variabeln ha en datatyp som är kompatibel med datatypen för kolumnen som resultatuppsättningen innehåller. En resultatuppsättning som innehåller en kolumn med datatypen Sträng kan till exempel inte mappas till en variabel med en numerisk datatyp. När du anger egenskapen TypeConversionMode till Tillåten kommer "Köra SQL-aktivitet" försöka konvertera utdataparametern och frågeresultatet till datatypen av den variabel resultaten tilldelas.

En XML-resultatuppsättning kan endast mappas till en variabel med datatypen Sträng eller Objekt . Om variabeln har datatypen Sträng returnerar SQL-aktiviteten Kör en sträng och XML-källan kan använda XML-data. Om variabeln har objektdatatypen returnerar SQL-aktiviteten Execute ett DOM-objekt (Document Object Model).

En fullständig resultatuppsättning måste mappas till en variabel av objektdatatypen . Returresultatet är ett raduppsättningsobjekt. Du kan använda en Foreach Loop-container för att extrahera tabellradvärdena som lagras i objektvariabeln till paketvariabler och sedan använda en skriptuppgift för att skriva data som lagras i paketvariabler till en fil. För en demonstration av hur du gör detta med hjälp av en Foreach Loop-container och en skriptuppgift.

I följande tabell sammanfattas de datatyper av variabler som kan mappas till resultatuppsättningar.

Typ av resultatuppsättning Datatyp för variabel Typ av objekt
Enskild rad Alla typer som är kompatibla med typkolumnen i resultatuppsättningen. Ej tillämpligt
Komplett resultatuppsättning Objekt Om uppgiften använder en intern anslutningshanterare, inklusive anslutningshanterare för ADO, OLE DB, Excel och ODBC, är det returnerade objektet en ADO-postuppsättning.

Om uppgiften använder en hanterad anslutningshanterare, till exempel ADO.NET anslutningshanteraren, är det returnerade objektet en System.Data.DataSet.

Du kan använda en skriptuppgift för att komma åt objektet System.Data.DataSet , som du ser i följande exempel.

Dim dt As Data.DataTable

Dim ds As Data.DataSet = CType(Dts.Variables("Recordset").Value, DataSet) dt = ds.Tables(0)
XML String String
XML Objekt Om uppgiften använder en intern anslutningshanterare, inklusive anslutningshanterare för ADO, OLE DB, Excel och ODBC, är det returnerade objektet en MSXML6. IXMLDOMDocument.

Om uppgiften använder en hanterad anslutningshanterare, till exempel ADO.NET anslutningshanteraren, är det returnerade objektet ett System.Xml.XmlDocument.

Variabeln kan definieras i omfånget för Execute SQL-uppgiften eller paketet. Om variabeln har paketomfång är resultatuppsättningen tillgänglig för andra uppgifter och containrar inom paketet, liksom för alla paket som körs genom köraktiviteterna "Kör Package" eller "Kör DTS 2000 Package".

När du mappar en variabel till en resultatuppsättning med en rad konverteras värden som inte är strängvärden som SQL-instruktionen returnerar till strängar när följande villkor uppfylls:

  • Egenskapen TypeConversionMode är inställd på true. Du anger egenskapsvärdet i fönstret Egenskaper eller genom att använda Utför SQL-uppgiftsredigerare.

  • Konverteringen resulterar inte i datatrunkering.

Mappa resultatuppsättningar till variabler i en KÖR SQL-uppgift

I det här avsnittet beskrivs hur du skapar en mappning mellan en resultatuppsättning och en variabel i en Execute SQL-uppgift. Genom att mappa en resultatuppsättning till en variabel blir resultatuppsättningen tillgänglig för andra element i paketet. Ett skript i en skriptuppgift kan till exempel läsa variabeln och sedan använda värdena från resultatuppsättningen eller så kan en XML-källa använda resultatuppsättningen som lagras i en variabel. Om resultatuppsättningen genereras av ett överordnat paket kan resultatuppsättningen göras tillgänglig för ett underordnat paket som anropas av en körningspaketaktivitet genom att mappa resultatuppsättningen till en variabel i det överordnade paketet och sedan skapa en överordnad paketvariabelkonfiguration i det underordnade paketet för att lagra det överordnade variabelvärdet.

  1. I SQL Server Data Tools (SSDT) öppnar du projektet Integration Services som innehåller det paket du vill ha.

  2. Dubbelklicka på paketet i Solution Explorer för att öppna det.

  3. Klicka på fliken Kontrollflöde .

  4. Om paketet inte redan innehåller en Execute SQL-uppgift lägger du till en i paketets kontrollflöde. Mer information finns i Lägga till eller ta bort en uppgift eller en container i ett kontrollflöde.

  5. Dubbelklicka på SQL-uppgiften "Kör".

  6. I dialogrutan Kör SQL-uppgiftsredigeraren går du till sidan Allmänt och väljer typen Enskild rad, Fullständig resultatuppsättning eller XML-resultatuppsättning .

  7. Klicka på Resultatuppsättning.

  8. Om du vill lägga till en resultatuppsättningsmappning klickar du på Lägg till.

  9. I listan Variabelnamn väljer du en variabel eller skapar en ny variabel. Mer information finns i Lägg till, Ta bort, Ändra omfång för User-Defined variabel i ett paket.

  10. I listan Resultatnamn kan du också ändra namnet på resultatuppsättningen.

    I allmänhet kan du använda kolumnnamnet som resultatuppsättningsnamn, eller så kan du använda kolumnens ordningstal i kolumnlistan som resultatuppsättning. Möjligheten att använda ett kolumnnamn som resultatuppsättningsnamn beror på vilken provider som uppgiften är konfigurerad att använda. Alla leverantörer gör inte kolumnnamn tillgängliga.

  11. Klicka på OK.

Felsökning av SQL-uppgiften Kör

Du kan logga de anrop som SQL-aktiviteten Kör gör till externa dataprovidrar. Du kan använda den här loggningsfunktionen för att felsöka de SQL-kommandon som Execute SQL-aktiviteten kör. Om du vill logga de anrop som SQL-aktiviteten Kör gör till externa dataproviders aktiverar du paketloggning och väljer diagnostikhändelsen på paketnivå. Mer information finns i Felsökningsverktyg för paketkörning.

Ibland returnerar ett SQL-kommando eller en lagrad procedur flera resultatuppsättningar. Dessa resultatuppsättningar innehåller inte bara rader som är resultatet av SELECT-frågor , utan enskilda värden som är resultatet av fel i RAISERROR - eller PRINT-instruktioner . Om aktiviteten ignorerar fel i resultatuppsättningar som inträffar efter den första resultatuppsättningen beror på vilken typ av anslutningshanterare som används:

  • När du använder OLE DB- och ADO-anslutningshanterare ignorerar aktiviteten de resultatuppsättningar som inträffar efter den första resultatuppsättningen. Med dessa anslutningshanterare ignorerar uppgiften därför ett fel som returneras av ett SQL-kommando eller en lagrad procedur när felet inte ingår i den första resultatuppsättningen.

  • När du använder ODBC och ADO.NET anslutningshanterare ignorerar aktiviteten inte resultatuppsättningar som inträffar efter den första resultatuppsättningen. Med dessa anslutningshanterare misslyckas uppgiften med ett fel när någon annan resultatuppsättning än den första innehåller ett fel.

Anpassade logginlägg

I följande tabell beskrivs den anpassade loggposten för åtgärden Kör SQL. Mer information finns i avsnittet om loggning av Integration Services (SSIS) .

Logganteckning Description
ExecuteSQLExecutingQuery Innehåller information om körningsfaserna för SQL-instruktionen. Loggposter skrivs när uppgiften hämtar anslutningen till databasen, när uppgiften börjar förbereda SQL-instruktionen och när körningen av SQL-instruktionen har slutförts. Loggposten för förberedelsefasen innehåller SQL-instruktionen som aktiviteten använder.