Aracılığıyla paylaş


SQL Server'a genişletilmiş bir saklı yordam ekleme

Önemli notÖnemli

Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmayın ve bu özelliği kullanmakta olan uygulamaları mümkün olduğunca erken bir zamanda değiştirin. clr tümleştirme yerine kullanın.

genişletilmiş saklı yordam işlevleri içeren dll uzantısı gibi hareket eder SQL Server.Dll dosyasını yüklemek için standart içeren bir gibi bir dizin dosyasını kopyalayın SQL Server dll dosyaları (C:\Program Files\Microsoft sql Server\MSSQL10_50.x\MSSQL\Binn varsayılan olarak).

Genişletilmiş saklı yordamı dll kopyalanan sunucuya, sonra bir SQL Server Sistem Yöneticisi için kaydetmek gerekir SQL Server her genişletilmiş saklı yordam işlev, dll.Bu yapılır kullanarak sp_addextendedproc sistem saklı yordamı.

Güvenlik notuGüvenlik Notu

Sistem Yöneticisi sunucusuna ekleme ve atanması yürütmek izinleri diğer kullanıcılara önce zararlı ve kötü amaçlı kodu içermediğinden emin olmak için genişletilmiş saklı yordam kapsamlı olarak gözden geçirmelidir.Tüm kullanıcı girdisi doğrulayın.Kullanıcı girişi doğrulamadan önce bağlamak.Asla yürütmek unvalidated kullanıcı girişi oluşturulmuş bir komut.Giriş doğrulama hakkında daha fazla bilgi için bkz: sql Injection.

Birinci parametre, sp_addextendedproc , işlevin adını belirtir ve ikinci parametre, o işlev içinde bulunduğu dll Dosyasının adını belirtir.Tam belirtmeniz önerilir yol , dll.

Önemli notÖnemli

Bir tam yol ile kayıtlı olmayan varolan dll sql Server 2005'e yükseltildikten sonra çalışmaz.Sorunu düzeltmek için sp_dropextendedproc , dll Dosyasının kaydını kaldırın ve sonra yeniden birlikte sp_addextendedproc, tam yol belirtme

Adı işlev içinde belirtilen sp_addextendedproc olması gerekir tam olarak aynı büyük/küçük harf, dahil olmak üzere işlev's name dll.Örneğin, bu komutu kaydeder bir işlev xp_hello, adlı bir dll içinde bulunan xp_hello.dll, gibi bir SQL Server genişletilmiş saklı yordam:

sp_addextendedproc 'xp_hello', 'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\xp_hello.dll'

Belirtilen işlevin adı, sp_addextendedproc tam olarak eşleşen dll, yeni adı işlev adı kaydedileceği de SQL Server, ancak adı kullanılabilir olmayacak.Örneğin, rağmen xp_Hello olarak kaydedilmiş bir SQL Server bulunan genişletilmiş saklı yordam xp_hello.dll, SQL Server kullanamaz kullanırsanız dll işlev bulmak xp_Hello daha sonra işlevini çağırmak için.

--Register the function (xp_hello) with an initial upper case
sp_addextendedproc 'xp_Hello', 'c:\xp_hello.dll'

--Use the newly registered name to call the function
DECLARE @txt varchar(33)
EXEC xp_Hello @txt OUTPUT

--This is the error message
Server: Msg 17750, Level 16, State 1, Procedure xp_Hello, Line 1
Could not load the DLL xp_hello.dll, or one of the DLLs it references. Reason: 127(The specified procedure could not be found.).

Belirtilen işlevin adı, sp_addextendedproc dll tam olarak işlev adı ile eşleşen ve harmanlama , SQL Server örnek büyük küçük durum duyarlı olduğundan, kullanıcı genişletilmiş saklı yordam adı. ve büyük-küçük durum birleşimini kullanarak çağırabilir

--Register the function (xp_hello)
sp_addextendedproc 'xp_hello', 'c:\xp_hello.dll'

--The following will succeed in calling xp_hello
DECLARE @txt varchar(33)
EXEC xp_Hello @txt OUTPUT

DECLARE @txt varchar(33)
EXEC xp_HelLO @txt OUTPUT

DECLARE @txt varchar(33)
EXEC xp_HELLO @txt OUTPUT

Zaman birleşimiyle SQL Server örnek duyarlı olduğundan, SQL Server olmayacak aramasına genişletilmiş saklı yordam--bile kayıtlı tam olarak aynı adı ve harmanlama--dll işlev olarak, yordamı çağırılır ile farklı bir durum.

--Register the function (xp_hello)
sp_addextendedproc 'xp_hello', 'c:\xp_hello.dll'

--The following will result in an error
DECLARE @txt varchar(33)
EXEC xp_HELLO @txt OUTPUT

--This is the error
Server: Msg 2812, Level 16, State 62, Line 1

Durdurma ve yeniden başlatma gerekli değildir SQL Server.