EXECUTE (Transact-SQL)
Bir komut dize ya da karakter dize içinde yürütür bir Transact-SQL toplu işveya aşağıdaki modüller biri: Sistem saklı yordam, kullanıcı tanımlı saklı yordam, skaler-değerli kullanıcı tanımlı işlevveya genişletilmiş saklı yordam.
Güvenlik Notu |
---|
Bir karakter dizeile execute aramadan önce karakter dizedoğrulayın.Hiçbir zaman yürütmek komutu değil doğrulanmış kullanıcı girişten oluşturulmuş.Daha fazla bilgi için, bkz. SQL Injection. |
SQL Serverexecute deyim bağlı sunuculara doğrudan komut göndermek için kullanılabilir olacak şekilde genişletir.Ayrıca, bir dize veya komutu yürütüldüğü içerik açıkça kümeolabilir.
Sözdizimi
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 ]
[;]
Bağımsız değişkenler
@return_status
Bir modül dönüş durumunu saklayan bir isteğe bağlı bir tamsayı değişkendir.execute deyimiçinde kullanılmadan önce bu değişken toplu iş, saklı yordamveya işlev bildirilmelidir.Bir skalerçağırmak için kullanıldığında-kullanıcı tanımlı işlev, değerli @return_status değişken herhangi skaler veri türü olabilir.
module_name
saklı yordam veya skalertam veya nonfully tam adı-değerli çağırmak için kullanıcı tanımlı işlev .Modül adları gerekir kurallarını karşılayan tanımlayıcıları.Genişletilmiş saklı yordamlar adları her zaman durumolan-duyarlı sunucu harmanlama ne olursa olsun.Modül çalıştıran kullanıcı modülü sahibi veya yürütmek için uygun izinlere sahip başka bir veritabanında oluşturulan modül yapılabilecek bu veritabanı içinde.Bir modül çalıştıran başka bir sunucuda yapılabilecek SQL Server modülünü çalıştıran kullanıcı o (uzaktan erişim) sunucusunu kullanmak için uygun izinlere sahipse ve modülünde o veritabanını. yürütmeksunucu adı belirtilir, ancak hiçbir veritabanı adı belirtilirse, SQL Server Veritabanı Altyapısı arayan modülü varsayılan veritabanı kullanıcı.
;number
Aynı adlı işlemleri gruplamak için kullanılan bir isteğe bağlı tamsayıdır.Bu parametre, genişletilmiş saklı yordamlar için kullanılmaz.Not
Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.
Yordam grupları hakkında daha fazla bilgi için bkz: CREATE PROCEDURE (Transact-SQL).
@module_name_var
Modül adı temsil eden yerel olarak tanımlanmış bir değişken adıdır.@parameter
Parametresi module_namegibi tanımlanan modül.Parametre adlarının önünde, tarafından at işareti (@).Aşağıdakilerle kullanıldığında @parameter_name=value form, parametre adları ve sabitler gerekmez sağlanan sırayla, bunlar tanımlanır modülü.Ancak, @parameter_name=value formu herhangi bir parametre için kullanıldığında, tüm izleyen parametreleri kullanılmalıdır,Varsayılan olarak, null olabilecek parametreleridir.
value
Modül veya doğrudan komut geçirmek için parametre değeridir.Parametre adı belirtilmezse, parametre değerlerini modülünde tanımlandığı sırada sağlanmalıdır.Bağlantılı sunucularda doğrudan komutlar çalýþtýrýrken parametre değerlerini sırasını ole DB sağlayıcı bağlantılı sunucuüzerinde bağlıdır.Çoğu ole DB sağlayıcıları, soldan sağa parametreleri için değerleri bağlayın.
Bir parametre değeri olan bir nesne adı, karakter dizeveya bir veritabanı veya şema adı tarafından yetkili, tam adı tek tırnak işareti içine alınmalıdır olur.Bir parametre değeri bir anahtar sözcük ise, anahtar sözcüğü çift tırnak içine alınmalıdır.
Varsayılan modülünde tanımlanan kullanıcı seçebilirsiniz modül yürütmek parametre belirtmeden.
Varsayılan değer null da olabilir.Genellikle, modül tanımı bir parametre değeri null ise alınması gereken eylem belirtir.
@variable
Bir parametre veya dönüş parametresi saklayan değişkendir.ÇIKIŞ
Modül veya komut dize parametre döndüren sürücüyü belirtir.Eşleşen parametre modül veya komut dize de çıktı anahtar sözcüğü kullanılarak oluşturulmuş olması gerekir.Parametre olarak imleç değişkenleri kullandığınızda bu anahtar sözcüğü kullanın.value Yürütülen bir bağlantılı sunucu, karşılık gelen değişiklikleri modülü çıktı olarak tanımlanmış @parameter gerçekleştirilen tarafından ole DBsağlayıcı geri değişken modülü yürütme sonunda kopyalanır.
Çıkış parametreleri kullanıldığına ve diğer deyimleri arama toplu iş veya modülü içinde dönüş değerlerini kullanmak amacı ise, parametre değeri bir değişken olarak gibi geçirilmelidir @parameter = @variable.Çıkış modülü bir çıkış parametresi olarak tanımlanmamış bir parametre için belirterek bir modül yürütmek yapamazsınız.Sabitler modülü çıktı kullanarak geçirilemez; parametre bir değişken adı gerektirir.Değişkenin veri türü olarak bildirilmelidir ve yordamını çalıştırmadan önce bir değer atanabilir.
uzak saklı yordamkarşı veya doğrudan komut bağlantılı sunucu yürütmek için execute kullanıldığında, çıkış parametreleri büyük nesne (lob) veri türleri herhangi biri olamaz.
Dönüş parametreleri lob veri türleri dışında herhangi bir veri türünde olabilir.
VARSAYILAN
Parametre varsayılan değeri modülünde tanımlandığı şekilde sağlar.Ne zaman modülünde tanımlanan varsayılan olmayan bir parametre ve bir parametre için bir değer beklediği eksik veya default anahtar belirtilen, bir hata oluşur.YENİDEN İLE
Yeni bir plan derlenmiş kullanılan ve modül yürütüldükten sonra atılan zorlar.Varolan bir sorgu planı modülü ise, bu planı önbellekte kalır.Sağlamış olursunuz parametre atypical ise veya veri önemli ölçüde değişmesi durumunda bu seçeneği kullanın.Bu seçenek, genişletilmiş saklı yordamlar için kullanılmaz.Pahalı olduğu için bu seçenek tutumlu kullanmanızı öneririz.
Not
saklı yordam çağıran opendatasource sözdizimi kullandığında, ile kullanamazsınız.Dört nesne adı belirtildiğinde ile seçenek yoksayılır.
@string_variable
Yerel bir değişken adıdır.@string_variable can be any char, varchar, nchar, or nvarchar data type.Bunlar (max) veri türü.[n] 'tsql_string'
sabitbirdize' dir. tsql_stringherhangi nvarchar veya varchar veri türü.n dahil ise, dize olarak yorumlanan nvarchar veri türü.as <context_specification>
deyim yürütüldüğü bağlamını belirtir.Daha fazla bilgi için, bkz. Yürütme içeriği anlama.OTURUM AÇMA
İçerik özellikleri için bir oturum açma belirtir.Kimliğe bürünme kapsam sunucusudur.KULLANICI
İçerik özellikleri için geçerli veritabanında bir kullanıcı belirtir.Geçerli veritabanı için kimliğe bürünme kapsam sınırlıdır.bağlam değiştirme için bir veritabanı kullanıcısı kullanıcının server -düzey izinleri devralmaz.Önemli bağlam değiştirme veritabanı kullanıcısı için etkin durumdayken veritabanı dışındaki kaynaklara erişmek için herhangi bir girişim deyim başarısız olmasına neden olur.Bu kullanım içerir database ifadeleri, dağıtılmış sorgular ve sorguları kullanarak başka bir veritabanına başvuruüç veya dört part tanımlayıcıları.kapsam bağlam değiştirme geçerli veritabanı dışında genişletmek için bkz: execute as kullanarak veritabanı kimliğe bürünme genişletme.
'name'
Geçerli kullanıcı veya oturum açma adıdır.namebir üye olmanız sysadmin sabit sunucu rolü veya bir asıl olarak mevcut sys.database_principals veya sys.server_principals, sırasıyla.nament AUTHORITY\LocalService, nt AUTHORITY\NetworkService veya nt AUTHORITY\LocalSystem gibi yerleşik hesap olamaz.
Daha fazla bilgi için bkz: bir kullanıcı veya oturum açma adı belirtme bu konuda daha sonra.
[n] 'command_string'
bağlantılı sunucuüzerinden iletilmesi için komutu içeren sabitbirdize ' dir. n dahil ise, dize olarak yorumlanan nvarchar veri türü.[?]
Kendisi için değerleri sağlanacak olan içinde parametreleri gösterir <arg listesi> bir EXEC('…', <arg-list>) at içinde kullanılan doğrudan komut <linkedsrv> deyim.ATlinked_server_name
Belirleyen command_string karşı yürütüldüğünde linked_server_name ve sonuçlar, varsa, istemcidöndü.linked_server_nameyerel sunucuyu varolan bir bağlantılı sunucu tanımında başvurması gerekir.Bağlantılı sunucular kullanarak tanımlanan sp_addlinkedserver.
Açıklamalar
Parametreleri ya da kullanarak tarafından sağlanan value veya kullanarak @parameter_name = value. parametresi bir hareket; parçası Bu nedenle, daha sonra değeri döndürülür bir işlemde parametre değiştirildiğinde, parametre önceki değerine başlamıyor.Çağırana döndürülen değeri her zaman modülü verir saat değerdir.
İç içe geçmiş bir modül başka bir çağrı veya bir ortak dil çalışma zamanı (clr) modülü, kullanıcı tanımlı türveya toplubaşvurarak yönetilen kod çalıştırır oluşur.İç içe geçmiş düzey adlı modül veya yönetilen kod başvurusu yürütme başlatır ve Aranan modül veya yönetilen kod başvurusu sona erdiğinde küçültülür artırılır.En fazla 32 iç içe düzeyleri aşan tam arama zinciri başarısız olmasına neden olur.Geçerli iç içe geçmiş düzey @@ nestlevel sistem işlevdepolanır.
Uzak saklı yordamları ve genişletilmiş saklı yordamlar kapsam bir hareketin içinde (Dağıtılmış BEGIN TRANSACTION deyim içinde veya çeşitli yapılandırma seçenekleri ile kullanıldığında verilen sürece) değildir, onları çağrıları aracılığıyla yürütülen komut geri alınamaz.Daha fazla bilgi için, bkz. Sistem saklı yordamları (Transact-SQL) ve Dağıtılmış Hareket (Transact-SQL) başlamak.
yürütmek bir imleç değişken bir imleç ile geçen bir yordam ayrılmış, imleç değişkenleri kullandığınızda bir hata oluşur.
execute anahtar sözcük deyim birinci toplu işise modülleri yürütürken belirtmek zorunda değildir.
execute ile saklı yordamları kullanma
execute anahtar sözcük deyim birinci toplu işolduğunda yürütmek saklı yordamları belirtmeniz gerekmez.
SQL Server sistem saklı yordamları başlangıç karakterleri ile sp_.Fiziksel olarak depolandıkları kaynak veritabanı, ancak mantıksal olarak görünür sys şema her sistem ve kullanıcı tanımlı veritabanı.Ne zaman bir sistem saklı yordam, bir toplu iş veya kullanıcı tanımlı saklı yordam veya işlevgibi bir modül içinde yürütmek öneririz saklı yordam adıyla nitelemeniz sys şema adı.
SQL ServerSistem genişletilmiş saklı yordamlar başlangıç karakterleri ile xp_, ve bunların içerdiği dbo şeması, master veritabanı.Ne zaman bir sistem genişletilmiş saklı yordam, bir toplu iş veya kullanıcı tanımlı saklı yordam veya işlevgibi bir modül içinde yürütmek öneririz saklı yordam adıyla nitelemeniz master.dbo.
Ne zaman bir kullanıcı tanımlı saklı yordam, bir toplu iş veya kullanıcı tanımlı saklı yordam veya işlevgibi bir modül içinde yürütmek saklı yordam adı şema adı ile nitelemek öneririz.Sistem saklı yordamaynı ada sahip bir kullanıcı tanımlı saklı yordam adı önermiyoruz.Saklı yordamları çalıştırma hakkında daha fazla bilgi için bkz: (Veritabanı altyapısı) saklı yordamları çalıştırma.
execute karakter dizesi ile kullanma
Önceki sürümlerinde SQL Server, karakter dizeleri sınırlı 8.000 bayt.Bu dinamik yürütme için büyük dizeleri bitiştirme gerektirir.De SQL Server, varchar(max) ve nvarchar(max) veri türleri karakter dizeleri en çok 2 gigabayt veri olmasına izin belirtilebilir
Veritabanı içeriğinde değişiklikler yalnızca execute deyimsonuna kadar son.Örneğin, sonra EXEC Bu veritabanı içeriği aşağıdaki deyim çalıştırın, master.
USE master; EXEC ('USE AdventureWorks2008R2; SELECT BusinessEntityID, JobTitle FROM HumanResources.Employee;');
Bağlam geçişi
Kullanabileceğiniz dinamik deyimyürütme içeriği geçmekAS { LOGIN | USER } = ' name 'yan tümce . Ne zaman bağlam değiştirme belirtilen olarak EXECUTE ('string') AS <context_specification>, bağlam değiştirme süresi kapsam yürütülen sorgunun sınırlıdır.Daha fazla bilgi için, bkz. İçerik Geçişi anlama.
Bir kullanıcı veya oturum açma adı belirtme
Belirtilen kullanıcı veya oturum açma adı AS { LOGIN | USER } = ' name ' gerekir mevcut bir sorumlusu olarak sys.database_principals veya sys.server_principals, sırasıyla veya deyim başarısız.Ayrıca, patron sunucu üzerinde özelliklerini Al izni verilmelidir.Arayan veritabanı sahibi veya üye olduğu sürece sysadmin sabit sunucu rolü, patron bulunmalıdır bile olduğunda veritabanı veya örnek , kullanıcının eriştiği SQL Server Windows-Grup üyeliği.Örneğin, aşağıdaki koşullar varsayılmaktadır:
CompanyDomain\SQLUsersGrup erişimi olan Sales veritabanı.
CompanyDomain\SqlUser1üye olduğu SQLUsers ve bu nedenle, örtülü erişimi Sales veritabanı.
Rağmen CompanyDomain\SqlUser1 veritabanına üyeliği yoluyla erişimi olan SQLUsers grubu, deyim EXECUTE @string_variable AS USER = 'CompanyDomain\SqlUser1' çünkü başarısız olur CompanyDomain\SqlUser1 veritabanında bir patron olarak yok
En iyi
Bir oturum açma veya deyim veya modülü içinde tanımlanan işlemleri gerçekleştirmek için gereken en az ayrıcalıkları olan bir kullanıcı belirtin.Örneğin, yalnızca veritabanı -düzey izinleri gereklidir, server -düzey izinleri olan oturum açma adı belirtme; veya bu izinleri gerekli olmadıkça bir veritabanı sahibi hesabını belirtmeyin.
İzinler
İzinlerini execute deyimçalıştırmak için gerekli değildir.Ancak, execute dizeiçinde başvurulan güvenli hale Getirilebilenler üzerindeki izinleri gereklidir.Örneğin, dize bir INSERT deyimiçeriyorsa, arayan execute deyim hedef tabloINSERT izni olmalıdır.İzinleri denetlenir execute deyim içinde bir modül dahil olsa bile saat execute deyim , karşılaşıldığında.
Bunları diğer kullanıcılara aktarım modülü, sahibine bir modül varsayılan izinleri YÜRÜTÜN.Bir modül çalıştırıldığında, bir dizeyürütür, modülü oluşturan kullanıcının bağlamında değil, modül yürütür kullanıcı bağlamında izinleri denetlenir.Aynı kullanıcı arama modülü ve çağrılan modülünün sahipse, ancak execute izni denetimi için ikinci modülde gerçekleştirilir.Daha fazla bilgi için, bkz. Sahiplik Chains.
Modül diğer veritabanı nesneleri erişirse, yürütme modülü, execute izni vardır ve aşağıdakilerden biri doğru olduğunda başarılı olur:
Modül execute as kullanıcı veya self işaretlenmiş ve modül sahibi başvurulan nesne üzerinde ilgili izinleri vardır.
Modül execute as ARAYAN işaretlenir ve nesne üzerinde ilgili izinleri vardır.
Modül execute as işaretlenmiş user_name, ve user_name olan ilgili izinleri nesne.
İçerik izinlerini değiştirme
Bir oturum açma execute as belirtmek için arayan özelliklerini al belirtilen oturum açma adına izinleriniz olmalıdır.execute as üzerindeki bir veritabanı kullanıcı belirtmek için arayan belirtilen kullanıcı adına özelliklerini Al izni olmalıdır.Yürütme içeriği yok belirtilir veya execute as ARAYAN belirtilen özelliklerini Al izni gerekmez.
Örnekler
A.Tek bir parametreye geçirmek için execute kullanarak
uspGetEmployeeManagerssaklı yordam tek bir parametre bekler ( @BusinessEntityID).Aşağıdaki örnekler yürütmek uspGetEmployeeManagerssaklı yordam BusinessEntityID 6 olarak, parametre değeri.
USE AdventureWorks2008R2;
GO
EXEC dbo.uspGetEmployeeManagers 6;
GO
Değişken yürütme açıkça adlandırılabilir:
EXEC dbo.uspGetEmployeeManagers @BusinessEntityID = 6;
GO
Aşağıdaki ilk deyim bir toplu iş , olup olmadığını veya bir osql veya sqlcmd komut dosyası, exec gerekli değildir.
dbo.uspGetEmployeeManagers 6;
GO
--Or
dbo.uspGetEmployeeManagers @BusinessEntityID = 6;
GO
B.Birden çok parametre kullanma
Aşağıdaki örnek yürütür spGetWhereUsedProductID saklı yordam.Bu iki parametre iletir: İlk parametre bir ürün kimliğidir (819) ve ikinci parametre, @CheckDate, olan bir datetime değer.
USE AdventureWorks2008R2;
GO
DECLARE @CheckDate datetime;
SET @CheckDate = GETDATE();
EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;
GO
C.'Tsql_string' execute kullanarak bir değişkeni ile
Aşağıdaki örnekte gösterildiği nasıl EXECUTE tutamaçları dinamik olarak oluşturulmuş dizeler içeren değişken.Bu örnek oluşturur tables_cursortüm kullanıcı tanımlı tablolar listesini tutmak içinimleç AdventureWorks2008R2 veritabanı ve sonra tablolar tüm dizinleri yeniden oluşturmak için liste kullanır
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.execute ile uzak saklı yordamkullanma
Aşağıdaki örnek yürütür uspGetEmployeeManagers saklı yordam uzak sunucuda SQLSERVER1 ve depolar başarı veya başarısızlık belirtir döndürülen durum @retstat.
DECLARE @retstat int;
EXECUTE @retstat = SQLSERVER1.AdventureWorks2008R2.dbo.uspGetEmployeeManagers @BusinessEntityID = 6;
E.YÜRÜTME saklı yordam değişkeni ile kullanma
Aşağıdaki örnek saklı yordam adı temsil eden bir değişken oluşturur.
DECLARE @proc_name varchar(30);
SET @proc_name = 'sys.sp_who';
EXEC @proc_name;
F.Varsayılan ile execute kullanarak
Aşağıdaki örnek saklı yordam birinci ve üçüncü parametreler için varsayılan değerleri oluşturur.Yordamı çalıştırdığınızda, birinci ve üçüncü parametreler için değer çağrısında iletilen veya varsayılan belirtildiğinde bu varsayılanları eklenir.Çeşitli şekillerde Not DEFAULT anahtar sözcük kullanılabilir.
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_Defaultssaklı yordam birçok birleşimlerde çalıştırılabilir.
-- 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.Linked_server_name at ile execute kullanarak
Aşağıdaki örnek komut dize bir uzak sunucuya geçirir.bağlantılı sunucuoluşturduğu'ınSeattleSales başka bir örnek işaret SQL Server ve DDLdeyim yürütür ( CREATE TABLE) bağlantılı sunucu' ı.
EXEC sp_addlinkedserver 'SeattleSales', 'SQL Server'
GO
EXECUTE ( 'CREATE TABLE AdventureWorks2008R2.dbo.SalesTbl
(SalesID int, SalesName varchar(10)) ; ' ) AT SeattleSales;
GO
H.execute ile yeniden kullanma
Aşağıdaki örnek yürütür Proc_Test_Defaults saklı yordam ve zorlar Derlenecek, yeni bir sorgu planı kullanılan ve modül yürütüldükten sonra attı.
EXECUTE dbo.Proc_Test_Defaults @p2 = 'A' WITH RECOMPILE;
GO
Ö.Kullanıcı tanımlı bir işlevile execute kullanarak
Aşağıdaki örnek yürütür ufnGetSalesOrderStatusText skaler kullanıcı tanımlı işlev.Değişken kullanır @returnstatus işlevtarafından döndürülen değeri saklamak için.işlev bir girdi parametresini mi, bekliyor @Status.Bu olarak tanımlanan bir tinyint veri türü.
USE AdventureWorks2008R2;
GO
DECLARE @returnstatus nvarchar(15);
SET @returnstatus = NULL;
EXEC @returnstatus = dbo.ufnGetSalesOrderStatusText @Status = 2;
PRINT @returnstatus;
GO
J.bağlantılı sunucubir Oracle veritabanını sorgulamak için execute kullanarak
Aşağıdaki örnek birkaç yürütür SELECT deyimlerini uzak Oracle Sunucusu.Örnek bağlantılı sunucu Oracle Sunucusu ekleme ve bağlantılı sunucu oturumu oluşturma başlar.
-- 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.İçerik başka bir kullanıcıya geçiş yapmak için execute as kullanıcı kullanma
Aşağıdaki örnek yürütür bir Transact-SQLbir tablo oluşturur ve belirtirdize AS USERyan tümce geçiş yapmak için çağrıyı yapandan deyim yürütme içeriği User1.Veritabanı Altyapısı İzinlerini kontrol User1 olduğunda deyim çalıştırma.User1veritabanında bir kullanıcı olarak varolması ve tablolar oluşturmak için izninizin olması gerekir Sales şema veya deyim başarısız olur.
USE AdventureWorks2008R2;
GO
EXECUTE ('CREATE TABLE Sales.SalesTable (SalesID int, SalesName varchar(10));')
AS USER = 'User1';
GO
L.YÜRÜTME ve linked_server_name at parametre kullanma
Aşağıdaki örnek, bir soru işareti kullanarak bir uzak sunucuya komut dize geçirir (?) parametresi. için yer tutucubağlantılı sunucuörneği oluştururSeattleSales ın başka bir örnek işaret SQL Server ve bir SELECT bağlantılı sunucudeyim . SELECTdeyim için bir yer tutucu olarak soru işareti kullanır ProductID parametresi (952), hangi deyimsağlandı.
-- 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
Ayrıca bkz.