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 Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te
SQL analiz uç noktasıMicrosoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
Belirli bir giriş değerleri kümesiyle çağrıldıklarında ve veritabanının aynı durumu verüldüğünde, belirleyici işlevler her zaman aynı sonucu döndürür. Belirli bir giriş değerleri kümesiyle çağrıldıklarında, erişdikleri veritabanı durumu aynı kalsa bile, belirsiz işlevler farklı sonuçlar döndürebilir. Örneğin, işlev AVG daha önce belirtilen nitelikler göz önüne alındığında her zaman aynı sonucu döndürür, ancak GETDATE geçerli tarih saat değerini döndüren işlev her zaman farklı bir sonuç döndürür.
SQL Server Veritabanı Altyapısı'nın işlevi çağıran hesaplanan sütunlardaki dizinler aracılığıyla veya işleve başvuran dizinli görünümler aracılığıyla işlevin sonuçlarını dizine alma becerisini belirleyen kullanıcı tanımlı işlevlerin çeşitli özellikleri vardır. Bir işlevin determinizmi böyle bir özelliktir. Örneğin, görünüm herhangi bir belirsiz işleve başvuruda bulunursa, bir görünümde kümelenmiş dizin oluşturulamaz. Determinizm de dahil olmak üzere işlevlerin özellikleri hakkında daha fazla bilgi için bkz . Kullanıcı tanımlı işlevler.
Belirleyici işlevler şemaya bağlı olmalıdır. Deterministik bir işlev oluştururken yan tümcesini SCHEMABINDING kullanın.
Bu makalede, yerleşik sistem işlevlerinin determinizmi ve genişletilmiş saklı yordamlara yönelik bir çağrı içerdiğinde kullanıcı tanımlı işlevlerin belirleyici özelliği üzerindeki etkisi tanımlanır.
bir işlevin belirleyici olup olmadığını belirleme
İşlevin object özelliğini sorgulayarak bir işlevin is_deterministic belirlenip belirlenmediğini de kontrol edebilirsiniz. Aşağıdaki örnek işlevin Sales.CalculateSalesTax belirleyici olup olmadığını belirler.
SELECT OBJECTPROPERTY(OBJECT_ID('Sales.CalculateSalesTax'), 'IsDeterministic');
Yerleşik işlev determinizmi
Yerleşik işlevlerin determinizmini etkileyemezsiniz. Yerleşik işlevlerin her biri, işlevin SQL Server tarafından nasıl uygulandığına bağlı olarak belirleyici veya belirsiz değildir. Örneğin, sorguda yan ORDER BY tümce belirtmek, bu sorguda kullanılan bir işlevin determinizmini değiştirmez.
FORMAT dışındaki tüm yerleşik dize işlevleri belirleyicidir. Bu işlevlerin listesi için bkz. Dize İşlevleri.
Dize işlevleri dışındaki yerleşik işlevler kategorilerinden aşağıdaki yerleşik işlevler her zaman belirleyicidir.
ABSACOSASINATANATN2CEILINGCOALESCECOSCOTDATALENGTHDATEADDDATEDIFFDAYDEGREESEXPFLOORISNULLISNUMERICLOGLOG10MONTHNULLIFPOWERRADIANSROUNDSIGNSINSQRTSQUARETANYEAR
Aşağıdaki işlevler her zaman belirleyici değildir, ancak belirlenebilir bir şekilde belirtildiğinde hesaplanan sütunlardaki dizinli görünümlerde veya dizinlerde kullanılabilir.
| İşlev | Comments |
|---|---|
| Tüm toplama işlevleri | ve yan tümceleriyle OVERORDER BY belirtilmediği sürece tüm toplama işlevleri belirleyicidir. Bu işlevlerin listesi için bkz. Toplama İşlevleri. |
CAST |
Datetime, smalldatetime veya sql_variant ile kullanılmadığı sürece belirleyici. |
CONVERT |
Bu koşullardan biri yoksa belirleyici: Kaynak türü sql_variant. Hedef türü sql_variant ve kaynak türü belirsiz değildir. Kaynak veya hedef türü datetime veya smalldatetime, diğer kaynak veya hedef türü bir karakter dizesidir ve belirsiz bir stil belirtilir. Belirlenimci olması için stil parametresinin sabit olması gerekir. Ayrıca, 20 ve 21 stilleri dışında, 100'den küçük veya buna eşit stiller belirsiz değildir. 106, 107, 109 ve 113 stilleri dışında, 100'den büyük stiller belirleyicidir. |
CHECKSUM |
deterministik, dışında CHECKSUM(*). |
ISDATE |
Belirleyici yalnızca işlevle CONVERT kullanıldığında stil CONVERT parametresi belirtilir ve stil 0, 100, 9 veya 109'a eşit değildir. |
RAND |
RAND yalnızca bir seed parametresi belirtildiğinde belirlenebilir. |
Tüm yapılandırma, imleç, meta veriler, güvenlik ve sistem istatistiksel işlevleri belirsiz değildir. Bu işlevlerin listesini görebilirsiniz.
Diğer kategorilerdeki aşağıdaki yerleşik işlevler her zaman belirsiz değildir.
@@CONNECTIONS@@CPU_BUSY@@DBTS@@IDLE@@IO_BUSY@@MAX_CONNECTIONS@@PACKET_ERRORS@@PACK_RECEIVED@@PACK_SENT@@TIMETICKS@@TOTAL_ERRORS@@TOTAL_READ@@TOTAL_WRITEAT TIME ZONECUME_DISTCURRENT_TIMESTAMPDENSE_RANKFIRST_VALUEFORMATGETDATEGETUTCDATEGET_TRANSMISSION_STATUSLAGLAST_VALUELEADMIN_ACTIVE_ROWVERSIONNEWIDNEWSEQUENTIALIDNEXT VALUE FORNTILEPARSENAMEPERCENTILE_CONTPERCENTILE_DISCPERCENT_RANKRANDRANKROW_NUMBERTEXTPTR
İşlevlerden genişletilmiş saklı yordamları çağırma
Genişletilmiş saklı yordamlar veritabanında yan etkilere neden olabileceğinden, genişletilmiş saklı yordamları çağıran işlevler belirsiz değildir. Yan etkiler, bir tabloya yapılan güncelleştirme veya dosya ya da ağ gibi bir dış kaynak gibi veritabanının genel durumunda yapılan değişikliklerdir. Örnek olarak bir dosyayı değiştirme veya e-posta iletisi gönderme verilebilir. Kullanıcı tanımlı bir işlevden genişletilmiş saklı yordam yürütürken tutarlı bir sonuç kümesini döndürmeye güvenmeyin. Veritabanında yan etkiler oluşturan kullanıcı tanımlı işlevler önerilmez.
Bir işlevin içinden çağrıldığında, genişletilmiş saklı yordam sonuç kümelerini istemciye döndüremez. İstemciye sonuç kümeleri döndüren herhangi bir Open Data Services API'sinin dönüş kodu vardır FAIL.
Genişletilmiş saklı yordam SQL Server'a geri bağlanabilir. Ancak yordam, genişletilmiş saklı yordamı çağıran özgün işlevle aynı işlemi birleştiremez.
Toplu veya saklı yordamdaki çağrılara benzer şekilde, genişletilmiş saklı yordam SQL Server'ın çalıştığı Windows güvenlik hesabı bağlamında yürütülür. Genişletilmiş saklı yordamın sahibi, diğer kullanıcılara yordamı yürütmek için izinler verirken bu güvenlik bağlamının izinlerini dikkate almalıdır.