Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analitik Platform Sistemi (PDW)
Microsoft Fabric'te SQL veritabanı
OLE DB sürücüsünü indirme
Bir depolanmış prosedür sıfır veya daha fazla parametreye sahip olabilir. Ayrıca bir değer de döndürebilir. SQL Server için OLE DB Sürücüsü kullanılırken, bir saklanan prosedüre parametreler şu adreslerden iletilebilir:
- Veri değerini sıkı kodlama.
- Parametre belirtisi (?) kullanarak parametreleri belirtirken, bir program değişkenini parametre işaretçisine bağlayın ve ardından veri değerini program değişkenine yerleştirin.
Uyarı
SQL Server depolanmış prosedürleri OLE DB ile adlandırılmış parametrelerle çağrılarken, parametre isimleri '@' karakteriyle başlamalıdır. Bu, SQL Server'a özgü bir kısıtlamadır. SQL Server için OLE DB Sürücüsü, bu kısıtlamayı MDAC'a göre daha sıkı uygular.
Parametreleri desteklemek için ICommandWithParameters arayüzü komut nesnesinde görünür. Parametreleri kullanmak için tüketici önce ICommandWithParameters::SetParameterInfo metodunu çağırarak (veya isteğe bağlı olarak GetParameterInfo metodunu çağıran bir çağrı ifadesi hazırlayarak) parametreleri sağlayıcıya açıklar. Tüketici daha sonra bir tampon yapısını belirleyen ve bu tampona parametre değerlerini yerleştiren bir accessör oluşturur. Son olarak, erişimciyi ve bir işaretçiyi tampona Execute için gönderir. Daha sonraki Execute çağrılarında, tüketici tampona yeni parametre değerleri yerleştirir ve Execute'u accessor handle ve buffer pointer ile çağırır.
Parametreler kullanılarak geçici bir depolanmış prosedürü çağıran bir komut, parametre bilgisini tanımlamak için önce ICommandWithParameters::SetParameterInfo komutunu çağırmalıdır. Bu çağrı, komutanın başarılı bir şekilde hazırlanmasından önce yapılmalıdır. Bu gereklilik, geçici bir işlem için iç adın, istemcinin kullandığı harici adından farklı olmasıdır. MSOLEDBSQL, geçici bir depolanmış prosedür için parametre bilgisini belirlemek amacıyla sistem tablolarını sorgulamıyor.
Aşağıdaki maddeler parametre bağlama sürecindeki adımlardır:
Parametre bilgilerini DBPARAMBINDINFO yapılarından oluşan bir dizide doldurun; yani, parametre adı, parametrenin veri tipi için sağlayıcıya özgü bir ad veya standart bir veri tipi adı vb. Dizideki her yapı bir parametreyi tanımlar. Bu dizi daha sonra SetParameterInfo yöntemine iletilir.
Parametreleri sağlayıcıya tanımlamak için ICommandWithParameters::SetParameterInfo metodunu çağırın. SetParameterInfo , her parametrin yerel veri tipini belirtir. SetParameterInfo argümanları şunlardır:
- Tip bilgisini ayarlamak için parametre sayısı.
- Tip bilgisi ayarlanacak parametre ordinalleri dizisi.
- DBPARAMBINDINFO yapılarından oluşan bir dizide.
IAccessor::CreateAccessor komutunu kullanarak bir parametre erişimcüsü oluşturun. Erişici, bir tamponun yapısını belirler ve parametre değerlerini tampona yerleştirir. CreateAccessor komutu, bir dizi bağlamadan bir accessör oluşturur. Bu bağlamalar, tüketici tarafından DBBINASYON yapılarının bir dizisi kullanılarak tanımlanır. Her bağlama, tüketicinin tamponuna tek bir parametre bağlar ve aşağıdaki gibi bilgileri içerir:
- Bağlamanın uygulandığı parametrenin ordinali.
- Bağlı olan nedir (veri değeri, uzunluğu ve durumu).
- Bu parçaların her birine tampon içindeki ofset.
- Tüketicinin tamponunda var olan veri değerinin uzunluğu ve türü.
Bir accessör, HACCESSOR tipindeki tutacağı ile tanımlanır. Bu kullanıcı CreateAccessor yöntemiyle döndürülür. Tüketici bir accessörü kullanmayı bitirdiğinde, tuttuğu belleği serbest bırakmak için ReleaseAccessor yöntemini çağırmalıdır.
Tüketici ICommand::Execute gibi bir metodu çağırdığında, tutamacı bir erişime, bir işaretçiyi ise bir tampona iletir. Sağlayıcı, bu erişimciyi kullanarak tampondaki verilerin nasıl aktarılacağını belirler.
DBPARAMS yapısını doldurun. Giriş parametre değerlerinin alındığı ve çıktı parametre değerlerinin yazıldığı tüketici değişkenleri, çalışma zamanında DBPARAMS yapısında ICommand::Execute'a iletilir. DBPARAMS yapısı üç unsurdan oluşur:
- Sağlayıcının giriş parametre verilerini aldığı ve sağlayıcının erişim parametre verisini geri döndürdüğü tampon işareti, erişim tutamacı tarafından belirtilen bağlamalara göre geçerlidir.
- Tampondaki parametre kümelerinin sayısı.
- Adım 3'te oluşturulan accessor kolu.
ICommand::Execute ile komutu çalıştırın.
Saklanan bir prosedürü çağırma yöntemleri
SQL Server'da bir depolanmış prosedür çalıştırılırken, SQL Server için OLE DB Sürücüsü şunları destekler:
- ODBC CALL kaçış dizisi.
- Uzaktan prosedür çağrısı (RPC) kaçış dizisi.
- Transact-SQL EXECUTE ifadesi.
ODBC CALL kaçış dizisi
Parametre bilgisini biliyorsanız, parametreleri sağlayıcıya açıklamak için ICommandWithParameters::SetParameterInfo metodunu çağırın. Aksi takdirde, ODBC CALL sözdizimi saklanan bir prosedürü çağırırken kullanıldığında, sağlayıcı depolanan prosedür parametre bilgisini bulmak için yardımcı bir fonksiyon çağırır.
Parametre bilgisinden (parametre metadatası) emin değilseniz, ODBC CALL sözdizimi önerilir.
ODBC CALL kaçış dizisi kullanılarak bir prosedürü çağırmanın genel sözdizimi şudur:
{[?=]procedure_name[([parametre][,[parametre]]... )]}
Örneğin:
{call SalesByCategory('Produce', '1995')}
RPC kaçış dizisi
RPC kaçış dizisi, saklanan bir prosedürü çağırmanın ODBC CALL sözdizisine benzer. Prosedür birçok kez çağrıldığında, RPC kaçış dizisi, saklanan bir prosedürü çağırmanın üç yolu arasında en iyi performanslı olanıdır.
RPC kaçış dizisi bir depolanmış prosedürü çalıştırmak için kullanıldığında, sağlayıcı parametre bilgisini belirlemek için herhangi bir yardımcı fonksiyon çağırmaz (ODBC CALL sözdizimi gibi). RPC sözdizimi ODBC CALL sözdiziminden daha basittir, bu yüzden komut daha hızlı ayrıştırılır ve performansı artırır. Bu durumda, ICommandWithParameters::SetParameterInfo çalıştırarak parametre bilgisini sağlamanız gerekir.
RPC kaçış dizisi için bir geri dönüş değeri gerek. Eğer saklanan prosedür bir değer döndürmezse, sunucu varsayılan olarak 0 döner. Ayrıca, saklanan prosedürde SQL Server imlecini açamazsınız. Saklanan prosedür örtük olarak hazırlanır ve ICommandPrepare::P repare çağrısı başarısız olur. RPC çağrısı hazırlanamadığı için sütun meta verisini sorgulamıyorsun; IColumnsInfo::GetColumnInfo ve IColumnsRowset::GetColumnsRowset DB_E_NOTPREPARED döndürecektir.
Tüm parametre meta verilerini biliyorsanız, RPC kaçış dizisi depolanmış prosedürleri çalıştırmak için önerilen yoldur.
Bu SQL, depolanmış bir prosedürü çağırmak için RPC kaçış dizisine bir örnektir:
{rpc SalesByCategory}
RPC kaçış dizisini gösteren örnek uygulama için, Stored Procedure Execute (Using RPC Syntax) ve Process Return Codes and Output Parameters (OLE DB) bölümlerine bakınız.
Transact-SQL EXECUTE ifadesi
ODBC CALL kaçış dizisi ve RPC kaçış dizisi, saklanan bir prosedürü çağırmak için tercih edilen yöntemlerdir, EXECUTE ifadesi yerine. SQL Server için OLE DB Sürücüsü, komut işlemeyi optimize etmek için SQL Server'ın RPC mekanizmasını kullanır. RPC protokolü, sunucuda yapılan parametre işleme ve ifade ayrıştırmalarının çoğunu ortadan kaldırarak performansı artırır.
Aşağıdaki SQL, Transact-SQL EXECUTE ifadesine örnektir:
EXECUTE SalesByCategory 'Produce', '1995'