Udostępnij za pośrednictwem


EXECUTE (Transact-SQL)

Wykonuje polecenia ciąg lub ciąg znaków w ciągu Transact-SQL partia, lub jeden z następujących modułów: System przechowywane procedury, procedury przechowywanej przez użytkownika, wartości wartość skalarna funkcja zdefiniowanej przez użytkownika lub rozszerzona procedura składowana.

Security noteSecurity Note:

Zanim zadzwonisz wykonać z ciągiem znaków, można sprawdzić poprawności ciąg znaków.Nigdy nie można wykonać polecenia, na podstawie danych wprowadzonych przez użytkownika, który nie został sprawdzony.Aby uzyskać więcej informacji zobaczSQL Injection.

SQL Server Rozszerza instrukcja wykonać, tak aby mógł być używany do wysyłania poleceń przekazujące do serwerów połączonych.Ponadto kontekstu, w którym wykonywane są polecenia lub ciąg może być jawnie ustawiony.

Topic link iconKonwencje składni języka Transact-SQL

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
    Czy jest zmienna opcjonalną liczbę całkowitą, która przechowuje stan zwrotu na module.Ta zmienna musi zostać zadeklarowane w partia, procedura przechowywana lub funkcja przed użyciem w instrukcja wykonać.

    Używany do wywoływania wartości wartość skalarna 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 przechowywana lub wartości wartość skalarna funkcja zdefiniowanej przez użytkownika do wywołania.Moduł nazwy muszą być zgodne z regułami dla identyfikatory.Nazwy rozszerzone procedury przechowywane są zawsze wielkość liter, niezależnie od sortowanie serwera.

    Moduł, który został utworzony w innej bazie danych mogą być wykonać w module uruchomione przez użytkownika ma odpowiednie uprawnienia do wykonać go w tej bazie danych lub jest właścicielem modułu.Moduł, mogą być wykonać na innym serwerze z systemem SQL Server Jeśli użytkownik uruchamiający moduł ma odpowiednie uprawnienia do używania tego serwera (dostępu zdalnego) i wykonać modułu znajdujących się w bazie danych. Jeśli określono nazwa serwera, ale nazwa bazy danych nie zostanie określona, SQL Server Database Engine szuka modułu w domyślna baza danych użytkownika.

  • ; number
    To opcjonalna wartość całkowita służąca do grupowania procedur o tej samej nazwie.Ten parametr nie jest używany w przypadku rozszerzonych procedur składowanych.

    Uwaga

    This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

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

  • @module\_name\_var
    Jest nazwą zmiennej zdefiniowane lokalnie, która reprezentuje nazwę modułu.

  • @parameter
    Jest to parametr dla module_name, zgodnie z definicją w module. Nazwy parametrów muszą być poprzedzone znak (@).W przypadku użycia z @parameter\_name=value formularz, nazwy parametrów i stałych nie mają być dostarczone w kolejności, w którym są zdefiniowane w module. Jednak jeśli @parameter\_name=value formularz jest używany dla wszelkich parametrów, należy użyć dla wszystkich kolejnych parametrów.

    Określanie nazwy właściciela widoku jest opcjonalne.

  • value
    Jest to wartość parametru przekazywane do modułu lub przekazujące kierują polecenia.Jeżeli nie podano nazwy parametrów, należy podać wartości parametrów, w kolejności zdefiniowanej w module.

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

    Jeżeli wartość parametru jest nazwę obiektu, ciąg znaków lub kwalifikowaną nazwę bazy danych lub nazwy schematu, całą nazwę muszą być ujęte w pojedynczy cudzysłów.Jeżeli wartość parametru jest słowo kluczowe, słowo kluczowe muszą być ujęte w podwójny cudzysłów.

    Jeśli wartość domyślna jest zdefiniowana w module, użytkownik może wykonywać moduł bez określania parametru.

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

  • @variable
    Czy zmienna, która przechowuje parametru lub parametr zwrotu.

  • DANE WYJŚCIOWE
    Określa, że ciąg polecenia lub moduł zwraca parametr.Pasujące parametru w ciąg polecenia lub modułu muszą również zostały utworzone przy użyciu słowa kluczowego OUTPUT.Jeśli jest używany jako parametry zmienne kursor za pomocą tego słowa kluczowego.

    Jeśli value jest definiowana jako wyjście moduł wykonywane przed serwer połączony, zmiany wprowadzone w odpowiadających imparameter wykonane przez OLE DB dostawca zostaną skopiowane do zmiennej po zakończeniu działania modułu.

    Jeśli używane są parametry Wyjście i opcje renderowania jest używanie wartości zwracane w innych instrukcjach wsadowy wywołujący lub moduł, wartość parametru muszą być przekazywane jako zmienne, takich jakparameter = @variable. Moduł nie można wykonać przez określenie parametru, który nie jest zdefiniowany jako parametru WYJŚCIOWEGO w module OUTPUT.Stałe nie mogą być przekazywane do modułu przy użyciu OUTPUT; parametr zwrotny wymaga nazwy zmiennej.Musi być zadeklarowany jako typ danych zmiennej i wartości przypisane przed wykonaniem tej procedury.

    Gdy wykonać jest używana dla zdalnych procedura przechowywana lub do wykonać polecenia przekazujące wobec serwer połączony, parametry wyjście nie może być jeden z typów danych dużych obiektów (LOB).

    Parametry zwrotu może być dowolnego typu danych, z wyjątkiem typów dane LOB.

  • WARTOŚĆ DOMYŚLNA
    Podaje wartość domyślną parametru, zgodnie z definicją w module.Gdy moduł spodziewa się wartości dla parametru, który nie ma zdefiniowanej domyślnej i albo parametr brakuje lub słowa kluczowego domyślny jest określony, wystąpi błąd.

  • Z PONOWNEJ KOMPILACJI
    Wymusza nowego planu skompilowany, używane i odrzucona po wykonaniu modułu.W przypadku istniejącego planu kwerendy dla modułu, plan ten pozostaje w pamięci podręcznej.

    Opcja ta jest używana, jeśli użytkownik jest podanie parametru jest nietypowych lub znacznie zmienił dane.Ta opcja nie jest używana do rozszerzonych procedur przechowywanych.Firma Microsoft zaleca użycie tej opcji oszczędnie, tylko ponieważ jest za duży.

    Uwaga

    Nie można używać WITH RECOMPILE podczas wywoływania procedura przechowywana, korzystającej ze składni OPENDATASOURCE.Opcja WITH RECOMPILE jest ignorowana, jeśli określono nazwę four-part obiektu.

  • @string\_variable
    Jest nazwą zmiennej lokalnej.@string\_variable może być dowolną char, varchar, nchar, lub nvarchar Typ danych. Obejmuje to (max) typy danych.

  • [N] ' tsql_string"
    Is a constant string.tsql_string can be any nvarchar or varchar data type.Jeżeli dołączono N ciąg jest interpretowana jako nvarchar Typ danych.

  • AS context_specification < >
    Określa kontekst, w którym jest wykonywane w instrukcja.Aby uzyskać więcej informacji zobaczUnderstanding Execution Context.

  • R = ograniczeń
    Określa identyfikator logowania jest kontekst do być uznawane.Zakres personifikacji jest na serwerze.

  • UŻYTKOWNIK
    Określa kontekst do się personifikowanych użytkowników w bieżącej bazie danych.Zakres personifikacji jest ograniczone do bieżącej bazy danych.przełączanie kontekstu użytkownika bazy danych nie dziedziczy uprawnień poziom serwera tego użytkownika.

    Important noteImportant Note:

    Podczas przełączanie kontekstu użytkownika bazy danych jest aktywny, wszelkie próby ponownego dostępu do zasobów poza bazą danych spowoduje, że instrukcja nie powiedzie się.Obejmuje to USE database instrukcje, kwerendami rozproszonymi i kwerendy, które odwołują się do innej bazy danych przy użyciu identyfikatorów part trzech lub czterech. Aby rozszerzyć zakres przełączanie kontekstu poza bieżącą bazę danych, zobacz Extending Database Impersonation by Using EXECUTE AS.

  • 'name'
    Is a valid user or login name.name must be a member of the sysadmin fixed server role or exist as a principal in sys.database_principals or sys.server_principals, respectively.

    name nie mogą być wbudowane konto, na przykład NT\Usługa, NT AUTHORITY\NetworkService lub AUTHORITY\LocalSystem NT.

    Aby uzyskać więcej informacji zobacz Określanie użytkownika lub nazwa logowania w dalszej części tego tematu.

  • [N] ' command_string"
    To ciąg stała, zawierające polecenie, które mają być przekazywane za pośrednictwem do serwer połączony.Jeżeli dołączono N ciąg jest interpretowana jako nvarchar Typ danych.

  • [?]
    Określa parametry, których wartości są dostarczane w <argument listy> przekazujące poleceń, które są używane w ("…", operacja EXEC <argument listy>) CO <linkedsrv> Instrukcja.

  • AT linked_server_name
    Specifies that command_string is executed against linked_server_name and results, if any, are returned to the client.linked_server_name must refer to an existing linked server definition in the local server.Serwery połączone są definiowane przy użyciu sp_addlinkedserver.

Remarks

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 wycofana transakcja, która jest nowsza, wartość parametru nie przywrócenie jego poprzedniej wartości. Wartość zwracana do obiektu wywołującego jest zawsze wartości w czasie zwraca modułu.

Zagnieżdżanie występuje wówczas, gdy jeden moduł wywołuje inny lub wykonuje kod zarządzany przez odwołanie do modułu (CLR) w czasie wykonywania języka wspólnego, typ zdefiniowany przez użytkownika lub agregacja.Poziom zagnieżdżenia jest zwiększany o nazwie modułu lub odwołanie do kod zarządzany rozpoczyna się wykonywanie i zostanie zmniejszona po zakończeniu o nazwie modułu lub odwołanie do kod zarządzany.Przekracza maksymalną liczbę poziomów zagnieżdżenia 32 powoduje zakończenie łańcucha wywołanie kończy się niepowodzeniem.Bieżący poziom zagnieżdżenia znajduje się w funkcja systemowej NESTLEVEL @@.

Ponieważ zdalnego procedur przechowywanych i rozszerzone procedury przechowywane nie są w zakresie transakcji (chyba że wydanych w ramach instrukcja BEGIN TRANSACTION ROZŁOŻONE lub używany z różnymi opcjami konfiguracja), polecenia wykonywane za pośrednictwem połączeń w celu ich nie może zostać przywrócona.Aby uzyskać więcej informacji zobacz System Stored Procedures (Transact-SQL) i BEGIN DISTRIBUTED TRANSACTION (Transact-SQL).

Podczas używania zmiennych kursor, gdy użytkownik wykonać procedury, że przechodzi w zmiennej kursor z kursor przydzielone do niego błąd wystąpi.

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

Korzystając z procedur przechowywanych wykonać

Nie trzeba określać słowo kluczowe wykonać podczas wykonywania procedury przechowywane, gdy w instrukcja jest pierwszy w partia.

SQL Server System przechowywane procedury, zaczyna się sp_ znaków.Są one przechowywane fizyczne w Baza danych zasób, ale logicznie pojawiają się w schemacie sys każdego systemu i bazy danych zdefiniowanych przez użytkownika.Gdy użytkownik wykonać systemowa procedura składowana, w serii lub wewnątrz modułu, takich jak użytkownika procedura przechowywana lub funkcja, firma Microsoft zaleca kwalifikują się nazwa procedura przechowywana o nazwie schematu sys.

SQL Server procedury przechowywane, zaczyna się xp_ znaki rozszerzone systemu i są one zawarte w schemacie dbo wzorzec bazy danych.Gdy użytkownik wykonać system rozszerzona procedura składowana, albo w partia lub wewnątrz modułu, takich jak użytkownika procedury przechowywanej lub funkcja, zalecamy kwalifikują się nazwa procedury przechowywanej z master.dbo.

Po wykonaniu przez użytkownika procedura przechowywana, w serii lub wewnątrz modułu, takich jak użytkownika procedura przechowywana lub funkcja, zaleca się zakwalifikować się nazwa procedura przechowywana o nazwie schematu.Nie zaleca się nazwa procedura przechowywana przez użytkownika o tej samej nazwie, jak systemowa procedura składowana.Aby uzyskać więcej informacji na temat wykonywania procedur przechowywanych zobacz Wykonywanie przechowywanych procedur (aparat bazy danych).

Ciąg znaków przy użyciu wykonać

We wcześniejszych wersjach SQL Server, ciągi znaków są ograniczone do 8000 bajtów. Wymaga to konkatenację długie ciągi do wykonywania dynamicznych.W SQL Server, varchar(max) i nvarchar(max) można określić typy danych umożliwiające ciągów znaków do do 2 gigabajtów danych.

Zmiany w bazie danych kontekście ostatniego tylko do końca instrukcja wykonać.Na przykład po EXEC w tym po instrukcja jest uruchamiany, kontekstu bazy danych jest głównym.

USE master; EXEC ('USE AdventureWorks; SELECT EmployeeID, Title FROM HumanResources.Employee;');

Przełączania 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 zobaczUnderstanding Context Switching.

Określanie użytkownika lub nazwa logowania

Nazwa użytkownika lub logowania, określonego w AS { LOGIN | USER } = ' name ' musi istnieć jako podmiotu w sys.database_principals lub sys.server_principals, odpowiednio, lub instrukcja nie powiedzie się. Ponadto należy udzielić uprawnienia PERSONIFIKACJI spłaty kapitału.Jeżeli obiekt wywołujący jest właścicielem bazy danych lub nie jest element członkowski roli serwera w stałej sysadmin główny musi istnieć, nawet gdy użytkownik uzyskuje dostęp do bazy danych lub wystąpienie programu SQL Server za pomocą grupy systemu Windows element członkowski wysyłki. Załóżmy na przykład, następujące warunki:

  • Grupa CompanyDomain\SQLUsers ma dostęp do bazy danych sprzedaży.

  • CompanyDomain\SqlUser1 jest członkiem SQLUsers i dlatego ma zawsze dostęp do bazy danych sprzedaży.

Mimo że CompanyDomain\SqlUser1 ma dostęp do bazy danych poprzez członkostwo w grupie SQLUsers instrukcja EXECUTE @string\_variable AS USER = 'CompanyDomain\SqlUser1' nie będzie działać, ponieważ CompanyDomain\SqlUser1 nie istnieje jako głównego w bazie danych.

Najważniejsze wskazówki

Określ identyfikator logowania lub użytkownik, który ma co najmniej uprawnienia wymagane do wykonania operacji, które są zdefiniowane w instrukcja lub moduł.Na przykład, nie zostanie określona nazwa logowania, która ma uprawnienia poziom serwera, jeśli tylko są uprawnienia poziom bazy danych; lub nie określono konta właściciela do bazy danych, chyba że te uprawnienia są wymagane.

Uprawnienia

Uprawnienia nie są wymagane do uruchomienia instrukcja wykonać.Jednak na securables, do których istnieją odwołania w ciąg wykonać wymagane są uprawnienia.Na przykład jeśli ciąg zawiera instrukcję SQL INSERT, wywołujący instrukcja wykonać musi mieć uprawnienie INSERT w tabela miejsce docelowe.Uprawnienia są sprawdzane w czasie, po napotkaniu instrukcja wykonać, nawet jeśli instrukcja wykonać jest zawarte w obrębie modułu.

Uprawnienia wykonać do domyślnego modułu do właściciela modułu, który może przesyłać je do innych użytkowników.Po uruchomieniu modułu, jest wykonywany ciąg znaków, uprawnienia są sprawdzane w kontekście użytkownika, który jest wykonywany w module, 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 w module wywoływanej, sprawdzanie uprawnień wykonać nie jest wykonać dla drugiego modułu.Aby uzyskać więcej informacji zobaczOwnership Chains.

Jeśli moduł ma dostęp do innych obiektów bazy danych, wykonać zakończy się pomyślnie, jeśli masz uprawnienie wykonać modułu i spełniony jest jeden z następujących czynności:

  • Moduł jest oznaczony jako wykonać AS USER lub SAMODZIELNIE, a właściciel modułu ma odpowiednie uprawnienia na obiekcie, do którego istnieje odwołanie.

  • Moduł jest oznaczona wykonać AS WYWOŁUJĄCEGO, i masz odpowiednie uprawnienia do obiektu.

  • Moduł jest oznaczony jako wykonać user_name, a user_name ma odpowiednie uprawnienia do obiektu.

Uprawnienia do przełączania kontekstu

Aby określić wykonać AS na identyfikator logowania, obiekt wywołujący musi mieć uprawnienia PERSONIFIKACJI nazwy logowania określony.Aby określić wykonać jako na użytkownika bazy danych, proces wywołujący musi mieć uprawnienia PERSONIFIKACJI określonej nazwy użytkownika.Kontekst wykonywania nie został określony lub wykonać obiektu WYWOŁUJĄCEGO AS jest określony, nie są wymagane uprawnienia PERSONIFIKACJI.

Przykłady

A.Aby przekazać jeden parametr, za pomocą wykonać

The uspGetEmployeeManagers procedura przechowywana expects one parameter (@EmployeeID). wykonać poniższych przykładach uspGetEmployeeManagers Procedura przechowywana z Employee ID 6 jako wartość parametru.

USE AdventureWorks;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO

Zmienna nazwą może być jawnie w realizacji:

EXEC dbo.uspGetEmployeeManagers @EmployeeID = 6;
GO

Jeśli następujące jest pierwszą instrukcją w serii lub Osql or SQLCMD skryptu, EXEC nie jest wymagane.

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

B.Korzystanie z wielu parametrów

W poniższym przykładzie wykonywany spGetWhereUsedProductID Procedura przechowywana. Przekazuje dwa parametry: pierwszy parametr jest identyfikator produktu (819) i drugi parametr @CheckDate, jest datetime wartość.

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

C.Za pomocą wykonać "tsql_string" za pomocą zmiennych

W poniższym przykładzie jak EXECUTE uchwyty tworzona dynamicznie ciągi, które zawierają zmiennych. W tym przykładzie tworzony tables_cursor kursor do przechowywania listy wszystkich tabel zdefiniowanych przez użytkownika w AdventureWorks bazy danych, a następnie zastosowania, które do wszystkich indeksów w tabelach.

USE AdventureWorks;
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.Przy użyciu zdalnego procedura przechowywana wykonać

W poniższym przykładzie wykonywany uspGetEmployeeManagers Procedura przechowywana na serwerze zdalnym SQLSERVER1 i zapisuje stan zwrotu, który oznacza sukces lub Niepowodzenie @retstat.

DECLARE @retstat int;
EXECUTE @retstat = SQLSERVER1.AdventureWorks.dbo.uspGetEmployeeManagers @EmployeeID = 6;

E.Za pomocą wykonać ze zmienną procedura przechowywana

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

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

F.Przy użyciu DEFAULT wykonać

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

The Proc_Test_Defaults procedura przechowywana can be executed in many combinations.

G.Za pomocą wykonać z AT linked_server_name

W poniższym przykładzie przekazuje ciąg polecenia do serwera zdalnego.Powoduje to utworzenie serwer połączony SeattleSales Wskazuje wystąpienie programu SQL Server i wykonuje (instrukcja do kodu DDLCREATE TABLE) dla tego serwer połączony.

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

H.Za pomocą wykonać WITH RECOMPILE

W poniższym przykładzie wykonywany Proc_Test_Defaults Procedura przechowywana wymusza nowy plan kwerend do skompilowania, używane i odrzucona po wykonaniu modułu.

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

I.wykonać przy użyciu funkcja zdefiniowanej przez użytkownika

W poniższym przykładzie wykonywany ufnGetSalesOrderStatusText wartość skalarna funkcja zdefiniowaną przez użytkownika. Użyto zmiennej @returnstatus do przechowywania wartości zwracanej przez funkcja. Funkcja spodziewa się jeden parametr wejściowy, @Status. Jest ona definiowana jako tinyint Typ danych.

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

J.Za pomocą wykonać do kwerendy bazy danych Oracle serwer połączony

W poniższym przykładzie wykonuje kilka SELECT instrukcje na zdalnym serwerze bazy danych Oracle. W przykładzie rozpoczyna się od dodawania serwera Oracle jako połączonego serwera i tworzenia 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

Wiersze mogą być tak szerokie, czasami dany operator nie może przetworzyć w wierszu.Za pomocą wykonać AS USER należy przełączyć kontekst do innego użytkownika

W poniższym przykładzie wykonywany Transact-SQL ciąg, który tworzy tabela i określa AS USER Klauzula należy przełączyć kontekst wykonanie instrukcja z od wywołującego User1. The Database Engine will check the permissions of User1 when the statement is run.User1 must exist as a user in the database and must have permission to create tables in the Sales schema, or the statement fails.

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

L.Za pomocą parametru wykonać oraz AT linked_server_name

W poniższym przykładzie przekazuje ciąg polecenia z serwerem zdalnym za pomocą (znak zapytania?) symbolu zastępczego dla parametru. W przykładzie Tworzenie serwer połączony SeattleSales Wskazuje wystąpienie programu SQL Server i wykonuje SELECT instrukcja dla tego serwer połączony. The SELECT instrukcja uses the question mark as a place holder for the ProductID parameter (952), which is provided after the instrukcja.

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