EXECUTE (Transact-SQL)

Wykonuje polecenia ciąg lub ciąg znaków w Transact-SQL partialub w jednym z następujących modułów: systemową procedura składowana, zdefiniowane przez użytkownika procedura składowana, wartość skalarna-wyceniane zdefiniowanej przez użytkownika funkcjalub rozszerzona procedura składowana.

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

Zanim zadzwonisz EXECUTE z ciągznaków na sprawdzenie poprawności ciągznaków.Nigdy nie wykonać polecenie, wykonane z użytkownikiem, która nie została potwierdzona.Aby uzyskać więcej informacji, zobacz Iniekcji SQL.

SQL ServerRozszerza instrukcja EXECUTE, dzięki czemu mogą być używane do wysyłania poleceń przekazujące do serwerów połączonych.Ponadto kontekstu, w którym wykonywane jest ciąg lub polecenia można jawnie zestaw.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]

Execute a character string
{ EXEC | EXECUTE } 
    ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
    [ AS { LOGIN | USER } = ' name ' ]
[;]

Execute a pass-through command against a linked server
{ EXEC | EXECUTE }
    ( { @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ]
        [ { , { value | @variable [ OUTPUT ] } } [ ...n ] ]
    ) 
    [ AS { LOGIN | USER } = ' name ' ]
    [ AT linked_server_name ]
[;]

Argumenty

  • @return_status
    Jest zmienna opcjonalna liczba całkowita, która przechowuje zwrotu stanu modułu.Ta zmienna musi zostać zadeklarowany w partia, procedura składowanalub funkcja , przed użyciem w wykonywanie instrukcja.

    Używany do wywoływania wartość skalarna-wycenione zdefiniowanej przez użytkownika funkcja @return_status zmienna może być dowolnego typu danych wartość skalarna .

  • module_name
    Jest w pełni kwalifikowana lub nonfully kwalifikowaną nazwę procedura składowana lub wartość skalarna-wycenione zdefiniowanej przez użytkownika funkcja do wywołania.Moduł nazwy muszą być zgodne z zasadami identyfikatorów.Nazwy rozszerzone procedury przechowywane są zawsze przypadek-poufne, niezależnie od sortowanie serwera.

    Moduł, który został utworzony w innej bazie danych mogą być wykonywane, użytkownik uruchamiający moduł ma odpowiednie uprawnienia do wykonać lub właścicielem modułu go w tej bazie danych.Moduł można wykonać na innym serwerze z systemem SQL Server , gdy użytkownik uruchomiony moduł ma uprawnienie do korzystania z serwera (zdalny dostęp) i wykonać modułu w tej bazie danych.Jeśli określono nazwa serwera , ale nazwa bazy danych nie zostanie określona, Aparat baz danych programu SQL Server szuka modułu w domyślna baza danych użytkownika.

  • ;number
    Jest liczbą całkowitą opcjonalny, który jest używany do grupowania procedury o tej samej nazwie.Ten parametr nie jest używany do rozszerzonych procedur przechowywanych.

    Ostrzeżenie

    Ta funkcja zostanie usunięta z przyszłej wersji programu Microsoft SQL Server. Należy unikać stosowania tej funkcji w nowych projektach oraz zaplanować modyfikację aplikacji, w których obecnie jest używana ta funkcja.

    Aby uzyskać więcej informacji o grupach procedury, zobacz CREATE PROCEDURE (Transact-SQL).

  • @module_name_var
    Jest nazwą lokalnie zdefiniowana zmienna, która reprezentuje nazwę modułu.

  • @parameter
    Jest to parametr dla module_name, jak określono w module.Nazwy parametrów muszą być poprzedzone znakiem (@).Gdy używana z @parameter_name=value formularz, nazwy parametrów i stałych nie trzeba podawać w kolejności, w której są zdefiniowane w module.Jednakże jeśli @parameter_name=value dla dowolnego parametru używany jest formularz, musi być używane dla wszystkich kolejnych parametrów.

    Parametry są domyślnie nullable.

  • value
    Wartość parametru przekazywane do modułu lub przekazującej polecenia.Jeśli nie określono parametru nazwy wartości parametrów muszą być dostarczone w kolejności zdefiniowanej w module.

    Podczas wykonywania polecenia przekazujące przeciwko serwerów połączonych, kolejność wartości parametrów zależy od OLE DB dostawca serwer połączony.Większość dostawców OLE DB powiązać wartości parametrów od lewej do prawej.

    Jeżeli wartość parametru jest nazwa obiektu, ciągznaków lub kwalifikowana nazwa bazy danych lub nazwy schematu, całą nazwę musi być ujęty w znaki cudzysłowu pojedynczego.Jeśli wartość parametru jest słowo kluczowe, słowo kluczowe muszą być ujęte w podwójny cudzysłów.

    Domyślnie jest zdefiniowany w module, użytkownik może wykonać moduł bez określenia parametru.

    Wartością domyślną może być również wartość NULL.Ogólnie rzecz biorąc definicja modułu Określa akcja należy podjąć, jeśli wartość parametru jest NULL.

  • @variable
    Jest zmienna, która przechowuje parametr lub zwracanych parametrów.

  • DANE WYJŚCIOWE
    Określa, że moduł lub polecenia ciąg zwraca parametr.Pasujące parametru w module lub polecenia ciąg musi również zostały utworzone przy użyciu słowa kluczowego danych wyjściowych.Za pomocą tego słowa kluczowego używać kursor zmienne jako parametry.

    Jeśli value jest zdefiniowany jako wyjściowy modułu wykonywane serwer połączony, wszelkie zmiany w odpowiadających im @parameter wykonywane OLE DB dostawca zostaną skopiowane do zmiennej na końcu wykonanie modułu.

    Jeśli są używane parametry wyjściowe i zamiarem jest używać wartości zwracane w innych instrukcjach wywołującego partia lub moduł, wartość parametru musi być przekazany jako zmienną, takich jak @parameter = @variable.Nie można wykonać moduł określając wyjścia dla parametru, który nie jest zdefiniowany jako parametru WYJŚCIOWEGO w module.Stałe nie mogą być przekazywane do modułu przy użyciu produkcji; Parametr zwrotny wymaga nazwy zmiennej.Musi być zadeklarowany jako typ danych zmiennej i wartości przypisane przed wykonaniem tej procedury.

    Gdy wykonywanie jest używany przeciwko zdalna procedura składowanalub wykonać przekazujące polecenia serwer połączony, parametry wyjściowe nie może być jeden z typów danych dużego obiektu (LOB).

    Parametrów zwrotnych może być dowolnego typu danych z wyjątkiem typu dane LOB.

  • DOMYŚLNE
    Podaje wartość domyślną parametru zdefiniowany w module.Gdy moduł oczekuje wartości parametru, który nie ma zdefiniowanej domyślnej i albo parametr brakuje lub słowo kluczowe domyślny jest określony, wystąpi błąd.

  • Z PONOWNEJ KOMPILACJI
    Wymusza nowego planu skompilowany, stosowane i usuwane po wykonaniu modułu.Jeśli istniejący plan kwerend dla modułu plan pozostaje w pamięci podręcznej.

    Użyj tej opcji, jeśli parametr, który jest dostarczenie jest nietypowe lub danych została znacznie zmieniona.Ta opcja nie jest używana do rozszerzonych procedur przechowywanych.Zaleca się użycie tej opcji oszczędnie, ponieważ jest kosztowne.

    Ostrzeżenie

    Nie można używać WITH RECOMPILE podczas wywoływania procedura składowana używa składni OPENDATASOURCE.Opcja WITH RECOMPILE jest ignorowana, jeśli nie określono nazwy czteroczęściowym identyfikatorem obiektu.

  • @string_variable
    Jest nazwą zmiennej lokalnej.@string_variable can be any char, varchar, nchar, or nvarchar data type.Obejmują one (max) typów danych.

  • [N] 'tsql_string"
    Jest stała ciąg.tsql_stringmoże to być dowolna nvarchar lub varchar typu danych.Jeżeli dołączono n ciąg jest interpretowana jako nvarchar typu danych.

  • JAKO <context_specification>
    Określa kontekst, w którym wykonaniu instrukcja .Aby uzyskać więcej informacji, zobacz Opis kontekstu wykonania.

  • IDENTYFIKATOR LOGOWANIA
    Określa, że można przeprowadzić personifikacji kontekst logowania.zakres personifikacji jest serwer.

  • UŻYTKOWNIK
    Określa, że kontekst można przeprowadzić personifikacji użytkownika w bieżącej bazie danych.zakres personifikacji jest ograniczony do bieżącej bazy danych.przełączanie kontekstu użytkownika bazy danych nie dziedziczą uprawnieniapoziom serwera - tego użytkownika.

    Ważna informacjaWażne:

    Gdy przełączanie kontekstu użytkownika bazy danych jest aktywny, próba dostępu do zasobów poza bazą danych spowoduje, że instrukcja nie powiedzie się.Obejmuje to wykorzystanie database instrukcje, kwerendami rozproszonymi i kwerend, które odwołują się innej bazy danych przy użyciu trzech lub czterech niepełnym identyfikatorów.Aby rozszerzyć zakres przełączanie kontekstu poza bieżącej bazy danych, zobacz Rozszerzanie bazy danych personifikacji przy użyciu jako EXECUTE.

  • 'name'
    Jest prawidłową nazwą użytkownika lub logowania.nameelement członkowski sysadmin stała rola serwera lub istnieje jako główny zobowiązany w sys.database_principals lub sys.server_principals, odpowiednio.

    namenie może być wbudowane konto, takie jak NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService lub NT AUTHORITY\LocalSystem.

    Aby uzyskać więcej informacji, zobacz określające nazwę logowania użytkownika lub dalej w tym temacie.

  • [N] 'command_string"
    Jest stała ciąg , który zawiera polecenia przekazywane do serwer połączony.Jeżeli dołączono n ciąg jest interpretowana jako nvarchar typu danych.

  • [?]
    Wskazuje parametry, dla których wartości są dostarczane w <lista argumentów> przekazujące poleceń, które są używane w EXEC('…', <arg-list>) na <linkedsrv> instrukcja.

  • ATlinked_server_name
    Określa, że command_string wykonywane przeciwko linked_server_name i wyniki, jeżeli występują, są zwracane do klient.linked_server_namemusi odwoływać się do istniejącej definicji serwer połączony na serwerze lokalnym.Serwery połączone są definiowane za pomocą sp_addlinkedserver.

Uwagi

Parametry mogą być dostarczane albo za pomocą value lub za pomocą @parameter_name = value. parametr nie jest częścią transakcji; w związku z tym jeśli parametr zostanie zmieniona w transakcji jest później wycofana, wartość parametru nie powraca do poprzedniej wartości.Wartość zwracana do obiektu wywołującego jest zawsze wartość w czas zwraca modułu.

Zagnieżdżanie występuje, gdy jeden moduł wywołuje inny lub wykonuje kod zarządzany odwołując się do wspólnego modułu językowego runtime (CLR), typ zdefiniowany przez użytkownikalub wartość zagregowana.poziom zagnieżdżenia jest zwiększany o nazwie modułu lub kod zarządzany odwołanie rozpoczyna wykonywanie i jest zmniejszana po zakończeniu o nazwie modułu lub kod zarządzany odwołanie.Przekraczającej maksymalnie 32 poziomów zagnieżdżenia powoduje zakończenie łańcucha wywołujący nie powiedzie się.Bieżący poziom zagnieżdżenia jest przechowywana w systemie @@ NESTLEVEL funkcja.

Ponieważ zdalnego procedur przechowywanych i rozszerzone procedury przechowywane nie są w zakres transakcji (chyba że wydane w ramach instrukcji BEGIN TRANSACTION ROZPROSZONYCH instrukcja lub używany z różnymi opcjami konfiguracja ), wykonywane poprzez ich wywołania polecenia nie można wycofać.Aby uzyskać więcej informacji, zobacz System przechowywane procedury języka Transact-SQL) i Rozpoczęcie transakcji ROZPROSZONYCH (Transact-SQL).

Używać zmiennych kursor , jeżeli wykonać procedury, która przekazuje w zmiennej kursor z kursor przydzielonej jej wystąpi błąd.

Nie trzeba określać słowo kluczowe EXECUTE, podczas wykonywania modułów, jeśli instrukcja jest pierwszą w partia.

WYKONYWANIE przy użyciu procedury przechowywanej

Nie trzeba określać słowo kluczowe wykonywanie, gdy wykonać przechowywanych procedur, gdy instrukcja jest pierwszą w partia.

SQL Server Rozpoczęcieprocedury składowane w systemie ze znakami sp_.Fizycznie są przechowywane w zasobów bazy danych, ale logicznie pojawiają się w sys schematu każdego systemu i bazy danych zdefiniowanych przez użytkownika.Gdy wykonać systemu procedura składowana, w partia lub wewnątrz modułu, takich jak zdefiniowane przez użytkownika procedura składowana lub funkcja, zalecamy kwalifikują się nazwa procedura składowana z sys nazwę schematu.

SQL ServerSystem rozszerzonych procedur przechowywanych rozpoczynających się od znaków xp_, i zawartych w dbo schemat master bazy danych.Gdy wykonać systemu rozszerzona procedura składowana, w partia lub wewnątrz modułu, takich jak zdefiniowane przez użytkownika procedura składowana lub funkcja, zalecamy kwalifikują się nazwa procedura składowana z master.dbo.

Gdy wykonać zdefiniowanej przez użytkownika procedura składowana, w partia lub wewnątrz modułu, takich jak zdefiniowane przez użytkownika procedura składowana lub funkcja, zalecamy kwalifikować nazwę procedura składowana , o nazwie schematu.Nie zaleca się nazwa użytkownika procedura składowana z taką samą nazwę jak systemu procedura składowana.Aby uzyskać więcej informacji na temat wykonywania procedur przechowywanych, zobacz Wykonywanie przechowywanych procedur (aparat bazy danych).

WYKONYWANIE przy użyciu ciągu znaków

W starszych wersjach SQL Server, ciągi znaków są ograniczone do 8000 bajtów.Wymaga to konkatenację duże ciągi do wykonywania dynamicznych.W SQL Server, varchar(max) i nvarchar(max) typów danych można określić, że umożliwiające ciągów znaków do maksymalnie 2 gigabajtów danych.

Zmiany w bazie danych kontekście ostatnia tylko do końca instrukcjaEXECUTE.Na przykład, po EXEC w tym po instrukcja jest uruchamiany, kontekstu bazy danych jest master.

USE master; EXEC ('USE AdventureWorks2008R2; SELECT BusinessEntityID, JobTitle FROM HumanResources.Employee;');

Przełączanie kontekstu

Można użyć AS { LOGIN | USER } = ' name ' klauzula należy przełączyć kontekst wykonywania dynamicznych instrukcja.Podczas przełączanie kontekstu jest określony jako EXECUTE ('string') AS <context_specification>, czas trwania, przełączanie kontekstu jest ograniczona do zakres kwerendy wykonywane.Aby uzyskać więcej informacji, zobacz Opis przełączania kontekstu.

Określając nazwę logowania użytkownika lub

Nazwa użytkownika lub logowania, określona w AS { LOGIN | USER } = ' name ' musi istnieć jako główny zobowiązany w sys.database_principals lub sys.server_principals, odpowiednio, lub instrukcja spowoduje niepowodzenie.Ponadto należy udzielić uprawnienia PERSONIFIKUJ kapitału.Chyba że obiekt wywołujący jest właścicielem bazy danych lub element członkowski sysadmin stała rola serweragłównego zobowiązanego musi istnieć nawet wtedy, gdy użytkownik uzyskuje dostęp do bazy danych lub wystąpienie SQL Server systemu Windows za pomocą grup członkostwa.Załóżmy na przykład, następujące warunki:

  • CompanyDomain\SQLUsersgrupa ma dostęp do Sales bazy danych.

  • CompanyDomain\SqlUser1element członkowski SQLUsers i dlatego ma zawsze dostęp do Sales bazy danych.

Chociaż CompanyDomain\SqlUser1 ma dostęp do bazy danych dzięki członkostwu w SQLUsers grupy, instrukcja EXECUTE @string_variable AS USER = 'CompanyDomain\SqlUser1' zakończy się niepowodzeniem, ponieważ CompanyDomain\SqlUser1 nie istnieje jako główny zobowiązany w bazie danych.

W trosce o

Określ identyfikator logowania lub użytkownika, który ma co najmniej uprawnienia wymagane do wykonywania operacji, które są zdefiniowane w instrukcja lub moduł.Na przykład nie określono nazwy logowania, który serwer -poziom uprawnień, jeśli tylko uprawnieniapoziom bazy danych — są wymagane; lub nie określono konta właściciela bazy danych, chyba że te uprawnienia są wymagane.

Uprawnienia

Nie są wymagane uprawnienia do uruchamiania instrukcjaEXECUTE.Jednakże na securables, podanych w wykonywanie ciągsą wymagane uprawnienia.Na przykład jeśli ciąg zawiera INSERT instrukcja, obiekt wywołujący instrukcja EXECUTE musi mieć uprawnienia do WSTAWIANIA wtabela miejsce docelowe. Uprawnienia są sprawdzane w czas wykonywania instrukcja okaże się, nawet jeśli instrukcja EXECUTE jest zawarte w obrębie modułu.

Uprawnienia wykonywania na domyślny moduł do właściciela modułu, który można przesłać je do innych użytkowników.Po uruchomieniu modułu, który jest wykonywany ciąg, uprawnienia są sprawdzane w kontekście użytkownika wykonującego modułu, a nie w kontekście użytkownika, która utworzyła moduł.Jednak jeśli ten sam użytkownik jest właścicielem wywołującego moduł i moduł wywoływanej, sprawdzanie uprawnień EXECUTE nie jest wykonywane dla drugiego modułu.Aby uzyskać więcej informacji, zobacz Łańcuchy własności.

Jeśli moduł uzyskuje dostęp do innych obiektów bazy danych, wykonanie powiedzie się, gdy uprawnienie EXECUTE w module i spełniony jest jeden z następujących czynności:

  • Moduł jest oznaczony wykonać jako użytkownik lub SELF i właściciela modułu ma odpowiednie uprawnienia do obiektu, do którego istnieje odwołanie.

  • Moduł jest oznaczona na wykonanie WYWOŁUJĄCEGO jako i mieć odpowiednie uprawnienia do obiektu.

  • Moduł jest oznaczony jako wykonywanie user_name, i user_name ma odpowiednie uprawnienia do obiektu.

Kontekst przełączania uprawnień

Aby określić jako wykonywanie na identyfikator logowania, wywołujący uprawnienia PERSONIFIKUJ określonej nazwie.Aby określić jako wykonywanie na użytkownika bazy danych, obiekt wywołujący uprawnienia PERSONIFIKUJ określona nazwa użytkownika.Określony kontekst nie wykonanie lub określony wykonanie WYWOŁUJĄCEGO jako, nie są wymagane uprawnienia PERSONIFIKUJ.

Przykłady

A.Aby przekazać jeden parametr przy użyciu EXECUTE

uspGetEmployeeManagersprocedura składowana oczekuje jednego parametru ( @BusinessEntityID).Następujące przykłady wykonać uspGetEmployeeManagersprocedura składowana z BusinessEntityID 6 jako jego wartość parametru.

USE AdventureWorks2008R2;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO

Zmiennej można wyraźnie nazwane w realizacji:

EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 6;
GO

Jeśli następujące jest pierwsza instrukcja w partia lub osql lub polecenie sqlcmd skrypt, EXEC nie jest wymagane.

dbo.uspGetEmployeeManagers 6;
GO
--Or
dbo.uspGetEmployeeManagers @BusinessEntityID = 6;
GO

B.Korzystanie z wielu parametrów

Poniższy przykład wykonuje spGetWhereUsedProductID procedura składowana.Przekazuje on dwa parametry: pierwszy parametr jest identyfikator produktu (819) i drugi parametr @CheckDate, jest datetime wartości.

USE AdventureWorks2008R2;
GO
DECLARE @CheckDate datetime;
SET @CheckDate = GETDATE();
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;
GO

C.Za pomocą EXECUTE "tsql_string" za pomocą zmiennych

W poniższym przykładzie jak EXECUTE uchwyty dynamicznie wbudowane ciągi zawierające zmiennych.To przykładowe polecenie tworzy tables_cursor kursor do przechowywania listy wszystkich tabel zdefiniowanych przez użytkownika w AdventureWorks2008R2 bazy danych, a następnie zastosowań, w których listy wszystkich indeksów w tabelach.

USE AdventureWorks2008R2;
GO
DECLARE tables_cursor CURSOR
   FOR
   SELECT s.name, t.name 
   FROM sys.objects AS t
   JOIN sys.schemas AS s ON s.schema_id = t.schema_id
   WHERE t.type = 'U';
OPEN tables_cursor;
DECLARE @schemaname sysname;
DECLARE @tablename sysname;
FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;
WHILE (@@FETCH_STATUS <> -1)
BEGIN;
   EXECUTE ('ALTER INDEX ALL ON ' + @schemaname + '.' + @tablename + ' REBUILD;');
   FETCH NEXT FROM tables_cursor INTO @schemaname, @tablename;
END;
PRINT 'The indexes on all tables have been rebuilt.';
CLOSE tables_cursor;
DEALLOCATE tables_cursor;
GO

D.WYKONYWANIE przy użyciu zdalna procedura składowana

Poniższy przykład wykonuje uspGetEmployeeManagers procedura składowana na serwerze zdalnym SQLSERVER1 i przechowuje zwrotu stanu wskazuje, Sukces lub Niepowodzenie w @retstat.

DECLARE @retstat int;
EXECUTE @retstat = SQLSERVER1.AdventureWorks2008R2.dbo.uspGetEmployeeManagers @BusinessEntityID = 6;

E.WYKONYWANIE przy użyciu zmiennej procedura składowana

Poniższy przykład tworzy zmienną, która reprezentuje nazwę procedura składowana .

DECLARE @proc_name varchar(30);
SET @proc_name = 'sys.sp_who';
EXEC @proc_name;

F.WYKONYWANIE przy użyciu domyślnego

Poniższy przykład tworzy procedura składowana z wartościami domyślnymi parametrów pierwszym i trzecim.Po uruchomieniu procedury te wartości domyślne są wstawiane parametrów pierwszym i trzecim wartość nie jest przekazywana w wywołaniu lub określona wartość domyślna.Należy zwrócić uwagę, różne sposoby DEFAULT można użyć słowa kluczowego.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID(N'dbo.ProcTestDefaults', N'P')IS NOT NULL
   DROP PROCEDURE dbo.ProcTestDefaults;
GO
-- Create the stored procedure.
CREATE PROCEDURE dbo.ProcTestDefaults (
@p1 smallint = 42, 
@p2 char(1), 
@p3 varchar(8) = 'CAR')
AS 
   SET NOCOUNT ON;
   SELECT @p1, @p2, @p3
;
GO

Proc_Test_Defaultsprocedura składowana mogą być wykonywane w wielu kombinacji.

-- Specifying a value only for one parameter (@p2).
EXECUTE dbo.ProcTestDefaults @p2 = 'A';
-- Specifying a value for the first two parameters.
EXECUTE dbo.ProcTestDefaults 68, 'B';
-- Specifying a value for all three parameters.
EXECUTE dbo.ProcTestDefaults 68, 'C', 'House';
-- Using the DEFAULT keyword for the first parameter.
EXECUTE dbo.ProcTestDefaults @p1 = DEFAULT, @p2 = 'D';
-- Specifying the parameters in an order different from the order defined in the procedure.
EXECUTE dbo.ProcTestDefaults DEFAULT, @p3 = 'Local', @p2 = 'E';
-- Using the DEFAULT keyword for the first and third parameters.
EXECUTE dbo.ProcTestDefaults DEFAULT, 'H', DEFAULT;
EXECUTE dbo.ProcTestDefaults DEFAULT, 'I', @p3 = DEFAULT;

G.Przy użyciu EXECUTE z w linked_server_name

Poniższy przykład przekazuje polecenia ciąg do serwera zdalnego.Tworzy serwer połączonySeattleSales wskazuje inne wystąpienie SQL Server i wykonujeinstrukcja DDL( CREATE TABLE) dla tego serwer połączony.

EXEC sp_addlinkedserver 'SeattleSales', 'SQL Server'
GO
EXECUTE ( 'CREATE TABLE AdventureWorks2008R2.dbo.SalesTbl 
(SalesID int, SalesName varchar(10)) ; ' ) AT SeattleSales;
GO

H.Za pomocą EXECUTE WITH RECOMPILE

Poniższy przykład wykonuje Proc_Test_Defaults procedura składowana i sił nowy plan kwerend do skompilowania, używane i odrzucona po wykonaniu modułu.

EXECUTE dbo.Proc_Test_Defaults @p2 = 'A' WITH RECOMPILE;
GO

I.WYKONYWANIE przy użyciu funkcjazdefiniowanej przez użytkownika

Poniższy przykład wykonuje ufnGetSalesOrderStatusText wartość skalarna zdefiniowanej przez użytkownika funkcja.Użyto zmiennej @returnstatus do przechowywania wartości zwracanej przez funkcja.funkcja spodziewa się jeden parametr wejściowy, @Status.Jest ona definiowana jako tinyint typu danych.

USE AdventureWorks2008R2;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO

J.Za pomocą wykonywanie kwerendy bazy danych Oracle na serwer połączony

Poniższy przykład wykonuje kilka SELECT instrukcji na zdalny serwer Oracle.Przykład rozpoczyna się przez dodanie serwera Oracle serwer połączony i tworzenie serwer połączony logowania.

-- Setup the linked server.
EXEC sp_addlinkedserver  
        @server='ORACLE',
        @srvproduct='Oracle',
        @provider='OraOLEDB.Oracle', 
        @datasrc='ORACLE10';

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname='ORACLE',
    @useself='false', 
    @locallogin=null, 
    @rmtuser='scott', 
    @rmtpassword='tiger';
 
EXEC sp_serveroption 'ORACLE', 'rpc out', true;
GO
 
-- Execute several statements on the linked Oracle server.
EXEC ( 'SELECT * FROM scott.emp') AT ORACLE;
GO
EXEC ( 'SELECT * FROM scott.emp WHERE MGR = ?', 7902) AT ORACLE;
GO
DECLARE @v INT; 
SET @v = 7902;
EXEC ( 'SELECT * FROM scott.emp WHERE MGR = ?', @v) AT ORACLE;
GO

K.Przełączanie kontekstu do innego użytkownika za pomocą wykonać jako użytkownik

Poniższy przykład wykonuje Transact-SQL ciąg , który tworzy tabela i określa AS USER klauzula należy przełączyć kontekst wykonanie instrukcja od rozmówcy do User1.Aparat baz danych Będzie sprawdzać uprawnienia z User1 po instrukcja wykonywania.User1musi istnieć jako użytkownika w bazie danych i musi mieć uprawnienie do tworzenia tabel w Sales schematu, lub instrukcja kończy się niepowodzeniem.

USE AdventureWorks2008R2;
GO
EXECUTE ('CREATE TABLE Sales.SalesTable (SalesID int, SalesName varchar(10));')
AS USER = 'User1';
GO

L.Za pomocą parametru wykonywanie oraz na linked_server_name

Poniższy przykład przekazuje polecenia ciąg do serwera zdalnego za pomocą znaku zapytania (?) symbolu zastępczego dla parametru.W przykładzie tworzone serwer połączony SeattleSales się do innego wystąpienie SQL Server i wykonuje SELECT instrukcja dla tego serwer połączony.SELECTinstrukcja używa znaku zapytania jako symbol zastępczy dla ProductID parametr (952), które jest dostarczane po instrukcja.

-- Setup the linked server.
EXEC sp_addlinkedserver 'SeattleSales', 'SQL Server'
GO
-- Execute the SELECT statement.
EXECUTE ('SELECT ProductID, Name 
    FROM AdventureWorks2008R2.Production.Product
    WHERE ProductID = ? ', 952) AT SeattleSales;
GO