Aracılığıyla paylaş


In-Memory OLTP için Skaler Kullanıcı Tanımlı İşlevler

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

SQL Server 2016'da (13.x), yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler oluşturup bırakabilirsiniz. Bu kullanıcı tanımlı işlevleri de değiştirebilirsiniz. Yerel derleme, Transact-SQL'de kullanıcı tanımlı işlevlerin değerlendirilme performansını artırır.

Yerel olarak derlenmiş, skaler kullanıcı tanımlı bir işlevi değiştirdiğinizde, işlem çalıştırılırken ve işlevin yeni sürümü derlenirken uygulama kullanılabilir durumda kalır.

Desteklenen T-SQL yapıları için bkz. Yerel Olarak Derlenmiş T-SQL Modülleri için Desteklenen Özellikler.

User-Defined İşlevleri Oluşturma, Bırakma ve Değiştirme

Create FUNCTION işlevini kullanarak yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevi, kullanıcı tanımlı işlevi kaldırmak için DROP İŞLEVini ve işlevi değiştirmek için ALTER İŞLEVini oluşturursunuz. KULLANıCı tanımlı işlevler için BEGIN ATOMIC WITH gereklidir.

Desteklenen söz dizimi ve tüm kısıtlamalar hakkında bilgi için aşağıdaki konulara bakın.

sp_recompile (Transact-SQL) saklı yordamı, yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevle kullanılabilir. Bu, işlevin meta verilerde var olan tanım kullanılarak yeniden derlenmesini sağlayacaktır.

Aşağıdaki örnekte AdventureWorks2022 örnek veritabanından bir skaler UDF gösterilmektedir.

CREATE FUNCTION [dbo].[ufnLeadingZeros_native](@Value int)   
RETURNS varchar(8)   
WITH NATIVE_COMPILATION, SCHEMABINDING  
AS   
BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'English')  
  
    DECLARE @ReturnValue varchar(8);  
    SET @ReturnValue = CONVERT(varchar(8), @Value);  
       DECLARE @i int = 0, @count int = 8 - LEN(@ReturnValue)  
  
    WHILE @i < @count  
       BEGIN  
            SET @ReturnValue = '0' + @ReturnValue;  
            SET @i += 1  
       END  
  
    RETURN (@ReturnValue);  
  
END  

Kullanıcı Tanımlı İşlevini Çağırma

Yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler, yerleşik skaler işlevler ve yorumlanan skaler kullanıcı tanımlı işlevlerle aynı yerde ifadelerde kullanılabilir. Yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler EXECUTE deyimiyle, Transact-SQL deyiminde ve yerel olarak derlenmiş bir saklı yordamda da kullanılabilir.

Bu skaler kullanıcı tanımlı işlevleri yerel olarak derlenmiş depolama yordamlarında ve yerel olarak derlenmiş kullanıcı tanımlı işlevlerde ve yerleşik işlevlere izin verilen her yerde kullanabilirsiniz. Geleneksel Transact-SQL modüllerinde yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevleri de kullanabilirsiniz.

Bu skaler kullanıcı tanımlı işlevleri, yorumlanmış bir skaler kullanıcı tanımlı işlevin kullanabildiği her yerde birlikte çalışma modunda kullanabilirsiniz. Bu kullanım, Bellek İyileştirmeli Tablolarla İşlemler bölümündeki Kapsayıcılar Arası İşlemler için Desteklenen Yalıtım Düzeyleri bölümünde açıklandığı gibi kapsayıcılar arası işlem sınırlamalarına tabidir. Birlikte çalışma modu hakkında daha fazla bilgi için bkz. Yorumlanmış Transact-SQL Kullanarak Memory-Optimized Tablolara Erişme.

Yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler açık bir yürütme bağlamı gerektirir. Daha fazla bilgi için bkz: EXECUTE AS Yan Tümcesi (Transact-SQL). "EXECUTE AS CALLER" komutu desteklenmiyor. Daha fazla bilgi için bkz . EXECUTE (Transact-SQL).

yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler için Transact-SQL Execute deyimleri için desteklenen söz dizimi için bkz. EXECUTE (Transact-SQL). Yerel olarak derlenmiş bir saklı yordamda kullanıcı tanımlı işlevleri yürütmek için desteklenen söz dizimi için bkz. Yerel Olarak Derlenmiş T-SQL Modülleri için Desteklenen Özellikler.

İpuçları ve Parametreler

Yerel olarak derlenmiş skaler kullanıcı tanımlı işlevler içindeki tablo, birleştirme ve sorgu ipuçları için destek, yerel olarak derlenmiş saklı yordamlar için bu ipuçları ile eşdeğerdir. Yorumlanan skaler kullanıcı tanımlı işlevlerde olduğu gibi, yerel olarak derlenmiş, skaler kullanıcı tanımlı bir işleve başvuran bir Transact-SQL sorgusuyla birlikte gelen sorgu ipuçları, bu kullanıcı tanımlı işlev için sorgu planını etkilemez.

Yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler için desteklenen parametreler, skaler kullanıcı tanımlı işlevler için parametrelere izin verildiğinde yerel olarak derlenmiş saklı yordamlar için desteklenen tüm parametrelerdir. Tablo değerli parametre desteklenen bir parametre örneğidir.

Schema-Bound

Aşağıdakiler yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler için geçerlidir.

  • CREATE FUNCTION ve ALTER FUNCTION ifadelerinde WITH SCHEMABINDING bağımsız değişkeni kullanılarak fonksiyonun şemaya bağlı olması gerekmektedir.

  • Şema bağlı saklı yordam veya kullanıcı tanımlı işlev tarafından başvurulduğunda kaldırılamaz veya değiştirilemez.

SHOWPLAN_XML

Yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler SHOWPLAN_XML destekler. Yerel olarak derlenmiş saklı yordamlarda olduğu gibi genel SHOWPLAN_XML şemasına uygundur. Kullanıcı tanımlı işlevlerin temel öğesidir <UDF>.

STATISTICS XML yerel olarak derlenmiş, skaler kullanıcı tanımlı işlevler için desteklenmez. STATISTICS XML etkinken kullanıcı tanımlı işleve başvuran bir sorgu çalıştırdığınızda, XML içeriği kullanıcı tanımlı işlevin bölümü olmadan döndürülür.

Permissions

Yerel olarak derlenmiş saklı yordamlarda olduğu gibi, yerel olarak derlenmiş, skaler kullanıcı tanımlı bir işlevden başvurulan nesnelerin izinleri, işlev oluşturulduğunda denetlenmektedir. Kimliğine bürünülen kullanıcının doğru izinleri yoksa CREATE İŞLEVi başarısız olur. İzin değişiklikleri kimliğine bürünülen kullanıcının artık doğru izinlere sahip olmamasıyla sonuçlanırsa, kullanıcı tanımlı işlevin sonraki yürütmeleri başarısız olur.

Yerel olarak derlenmiş bir saklı yordam içinde yerel olarak derlenmiş, skaler kullanıcı tanımlı bir işlev kullandığınızda, dış yordam oluşturulduğunda kullanıcı tanımlı işlevi yürütme izinleri denetlenür. Dış yordam tarafından kimliğine bürünülen kullanıcının kullanıcı tanımlı işlev için EXEC izinleri yoksa saklı yordamın oluşturulması başarısız olur. İzin değişiklikleri kullanıcının artık EXEC izinlerine sahip olmamasıyla sonuçlanırsa, dış yordamın yürütülmesi başarısız olur.

Ayrıca Bkz.

Yerleşik İşlevler (Transact-SQL)
Yürütme Planını XML Biçiminde Kaydetme