Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pemicu Azure SQL menggunakan fungsionalitas pelacakan perubahan SQL untuk memantau tabel SQL untuk perubahan dan memicu fungsi saat baris dibuat, diperbarui, atau dihapus. Untuk detail konfigurasi untuk pelacakan perubahan untuk digunakan dengan pemicu Azure SQL, lihat Menyiapkan pelacakan perubahan. Untuk informasi tentang detail penyiapan ekstensi Azure SQL untuk Azure Functions, lihat gambaran umum pengikatan SQL.
Keputusan penskalaan pemicu Azure SQL untuk paket Konsumsi dan Premium dilakukan melalui penskalaan berbasis target. Untuk informasi selengkapnya, lihat Penskalaan berbasis target dan tinjau opsi hosting Azure Functions.
Catatan
Dukungan untuk paket Konsumsi memerlukan rilis v3.1.284 atau yang lebih baru dari pengikatan Azure SQL untuk Azure Functions.
Gambaran Umum Fungsionalitas
Pengikatan pemicu Azure SQL menggunakan perulangan polling untuk memeriksa perubahan, memicu fungsi pengguna saat perubahan terdeteksi. Pada tingkat tinggi, perulangan terlihat seperti ini:
while (true) {
1. Get list of changes on table - up to a maximum number controlled by the Sql_Trigger_MaxBatchSize setting
2. Trigger function with list of changes
3. Wait for delay controlled by Sql_Trigger_PollingIntervalMs setting
}
Perubahan diproses dalam urutan perubahannya dilakukan, dengan perubahan terlama sedang diproses terlebih dahulu. Beberapa catatan tentang pemrosesan perubahan:
- Jika perubahan pada beberapa baris dilakukan sekaligus, urutan yang tepat bahwa baris dikirim ke fungsi didasarkan pada urutan yang dikembalikan oleh fungsi CHANGETABLE
- Perubahan "di-batch" bersama-sama untuk baris. Jika beberapa perubahan dilakukan pada baris antara setiap iterasi perulangan, maka hanya satu entri perubahan yang ada untuk baris tersebut yang akan menampilkan perbedaan antara status terakhir yang diproses dan status saat ini
- Jika perubahan dilakukan pada sekumpulan baris, lalu kumpulan perubahan lain dilakukan pada setengah dari baris yang sama tersebut, maka setengah dari baris yang tidak diubah untuk kedua kalinya diproses terlebih dahulu. Logika pemrosesan ini disebabkan oleh catatan di atas dengan perubahan yang di-batch - pemicu hanya akan melihat perubahan "terakhir" yang dibuat dan menggunakannya untuk urutan pemrosesannya
Catatan
Pelacakan perubahan Azure SQL dapat mendeteksi perubahan tingkat baris dalam tabel yang menggunakan teknologi enkripsi seperti Selalu Dienkripsi atau Enkripsi Data Transparan (TDE). Namun, pemicu Azure SQL tidak mendekripsi atau mengekspos nilai kolom terenkripsi dalam payload perubahan. Pemicu dapat mendeteksi bahwa perubahan terjadi tetapi tidak dapat mengakses data yang didekripsi untuk kolom tersebut.
Untuk informasi selengkapnya tentang pelacakan perubahan dan cara penggunaannya oleh aplikasi seperti pemicu Azure SQL, lihat bekerja dengan pelacakan perubahan .
Penting
Untuk keamanan yang optimal, Anda harus menggunakan ID Microsoft Entra dengan identitas terkelola untuk koneksi antara Functions dan Azure SQL Database. Identitas terkelola membuat aplikasi Anda lebih aman dengan menghilangkan rahasia dari penyebaran aplikasi Anda, seperti kredensial di string koneksi, nama server, dan port yang digunakan. Anda dapat mempelajari cara menggunakan identitas terkelola dalam tutorial ini, Menyambungkan aplikasi fungsi ke Azure SQL dengan identitas terkelola dan pengikatan SQL.
Contoh penggunaan
Sampel lainnya untuk pemicu Azure SQL tersedia di repositori GitHub.
Contoh mengacu pada ToDoItem kelas dan tabel database terkait:
namespace AzureSQL.ToDo
{
public class ToDoItem
{
public Guid Id { get; set; }
public int? order { get; set; }
public string title { get; set; }
public string url { get; set; }
public bool? completed { get; set; }
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
Pelacakan perubahan diaktifkan pada database dan pada tabel:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
Pemicu SQL mengikat ke IReadOnlyList<SqlChange<T>>, daftar SqlChange objek masing-masing dengan dua properti:
-
Item: item yang diubah. Jenis item harus mengikuti skema tabel seperti yang terlihat di
ToDoItemkelas . -
Operasi: nilai dari
SqlChangeOperationenum. Nilai yang mungkin adalahInsert,Update, danDelete.
Contoh berikut menunjukkan fungsi C# yang dipanggil saat ada perubahan pada ToDo tabel:
using System;
using System.Collections.Generic;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
namespace AzureSQL.ToDo
{
public static class ToDoTrigger
{
[Function("ToDoTrigger")]
public static void Run(
[SqlTrigger("[dbo].[ToDo]", "SqlConnectionString")]
IReadOnlyList<SqlChange<ToDoItem>> changes,
FunctionContext context)
{
var logger = context.GetLogger("ToDoTrigger");
foreach (SqlChange<ToDoItem> change in changes)
{
ToDoItem toDoItem = change.Item;
logger.LogInformation($"Change operation: {change.Operation}");
logger.LogInformation($"Id: {toDoItem.Id}, Title: {toDoItem.title}, Url: {toDoItem.url}, Completed: {toDoItem.completed}");
}
}
}
}
Contoh penggunaan
Sampel lainnya untuk pemicu Azure SQL tersedia di repositori GitHub.
Contohnya mengacu pada ToDoItem kelas, SqlChangeToDoItem kelas, SqlChangeOperation enum, dan tabel database terkait:
Dalam file ToDoItem.javaterpisah :
package com.function;
import java.util.UUID;
public class ToDoItem {
public UUID Id;
public int order;
public String title;
public String url;
public boolean completed;
public ToDoItem() {
}
public ToDoItem(UUID Id, int order, String title, String url, boolean completed) {
this.Id = Id;
this.order = order;
this.title = title;
this.url = url;
this.completed = completed;
}
}
Dalam file SqlChangeToDoItem.javaterpisah :
package com.function;
public class SqlChangeToDoItem {
public ToDoItem item;
public SqlChangeOperation operation;
public SqlChangeToDoItem() {
}
public SqlChangeToDoItem(ToDoItem Item, SqlChangeOperation Operation) {
this.Item = Item;
this.Operation = Operation;
}
}
Dalam file SqlChangeOperation.javaterpisah :
package com.function;
import com.google.gson.annotations.SerializedName;
public enum SqlChangeOperation {
@SerializedName("0")
Insert,
@SerializedName("1")
Update,
@SerializedName("2")
Delete;
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
Pelacakan perubahan diaktifkan pada database dan pada tabel:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
Pemicu SQL mengikat ke SqlChangeToDoItem[], array SqlChangeToDoItem objek masing-masing dengan dua properti:
-
item: item yang diubah. Jenis item harus mengikuti skema tabel seperti yang terlihat di
ToDoItemkelas . -
operation: nilai dari
SqlChangeOperationenum. Nilai yang mungkin adalahInsert,Update, danDelete.
Contoh berikut menunjukkan fungsi Java yang dipanggil saat ada perubahan pada ToDo tabel:
package com.function;
import com.microsoft.azure.functions.ExecutionContext;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.sql.annotation.SQLTrigger;
import com.function.Common.SqlChangeToDoItem;
import com.google.gson.Gson;
import java.util.logging.Level;
public class ProductsTrigger {
@FunctionName("ToDoTrigger")
public void run(
@SQLTrigger(
name = "todoItems",
tableName = "[dbo].[ToDo]",
connectionStringSetting = "SqlConnectionString")
SqlChangeToDoItem[] todoItems,
ExecutionContext context) {
context.getLogger().log(Level.INFO, "SQL Changes: " + new Gson().toJson(changes));
}
}
Contoh penggunaan
Sampel lainnya untuk pemicu Azure SQL tersedia di repositori GitHub.
Contoh mengacu pada ToDoItem tabel database:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
Pelacakan perubahan diaktifkan pada database dan pada tabel:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
Pemicu SQL mengikat ke todoChanges, daftar objek masing-masing dengan dua properti:
- item: item yang diubah. Struktur item akan mengikuti skema tabel.
-
operasi: nilai yang mungkin adalah
Insert,Update, danDelete.
Contoh berikut menunjukkan fungsi PowerShell yang dipanggil saat ada perubahan pada ToDo tabel.
Berikut ini adalah mengikat data dalam file function.json:
{
"name": "todoChanges",
"type": "sqlTrigger",
"direction": "in",
"tableName": "dbo.ToDo",
"connectionStringSetting": "SqlConnectionString"
}
Bagian konfigurasi menjelaskan properti ini.
Berikut ini adalah contoh kode PowerShell untuk fungsi dalam run.ps1 file:
using namespace System.Net
param($todoChanges)
# The output is used to inspect the trigger binding parameter in test methods.
# Use -Compress to remove new lines and spaces for testing purposes.
$changesJson = $todoChanges | ConvertTo-Json -Compress
Write-Host "SQL Changes: $changesJson"
Contoh penggunaan
Sampel lainnya untuk pemicu Azure SQL tersedia di repositori GitHub.
Contoh mengacu pada ToDoItem tabel database:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
Pelacakan perubahan diaktifkan pada database dan pada tabel:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
Pemicu SQL mengikat todoChanges, array objek masing-masing dengan dua properti:
- item: item yang diubah. Struktur item akan mengikuti skema tabel.
-
operasi: nilai yang mungkin adalah
Insert,Update, danDelete.
Contoh berikut menunjukkan fungsi JavaScript yang dipanggil saat ada perubahan pada ToDo tabel.
Berikut ini adalah mengikat data dalam file function.json:
{
"name": "todoChanges",
"type": "sqlTrigger",
"direction": "in",
"tableName": "dbo.ToDo",
"connectionStringSetting": "SqlConnectionString"
}
Bagian konfigurasi menjelaskan properti ini.
Berikut ini adalah contoh kode JavaScript untuk fungsi dalam index.js file:
module.exports = async function (context, todoChanges) {
context.log(`SQL Changes: ${JSON.stringify(todoChanges)}`)
}
Contoh penggunaan
Sampel lainnya untuk pemicu Azure SQL tersedia di repositori GitHub.
Contoh mengacu pada ToDoItem tabel database:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
Pelacakan perubahan diaktifkan pada database dan pada tabel:
ALTER DATABASE [SampleDatabase]
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE [dbo].[ToDo]
ENABLE CHANGE_TRACKING;
Pemicu SQL mengikat ke variabel todoChanges, daftar objek masing-masing dengan dua properti:
- item: item yang diubah. Struktur item akan mengikuti skema tabel.
-
operasi: nilai yang mungkin adalah
Insert,Update, danDelete.
Contoh berikut menunjukkan fungsi Python yang dipanggil saat ada perubahan pada ToDo tabel.
Berikut ini adalah contoh kode python untuk file function_app.py:
import json
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="ToDoTrigger")
@app.sql_trigger(arg_name="todo",
table_name="ToDo",
connection_string_setting="SqlConnectionString")
def todo_trigger(todo: str) -> None:
logging.info("SQL Changes: %s", json.loads(todo))
Atribut
Pustaka C# menggunakan atribut SqlTrigger untuk mendeklarasikan pemicu SQL pada fungsi , yang memiliki properti berikut:
| Properti atribut | Deskripsi |
|---|---|
| Nama Tabel | Harus diisi. Nama tabel yang dipantau oleh pemicu. |
| ConnectionStringSetting | Harus diisi. Nama pengaturan aplikasi yang berisi string koneksi untuk database yang berisi tabel yang dipantau untuk perubahan. Nama pengaturan string koneksi sesuai dengan pengaturan aplikasi (di local.settings.json untuk pengembangan lokal) yang berisi string koneksi ke instans Azure SQL atau SQL Server. |
| LeasesTableName | Opsional. Nama tabel yang digunakan untuk menyimpan sewa. Jika tidak ditentukan, nama tabel sewa akan Leases_{FunctionId}_{TableId}. Informasi lebih lanjut tentang bagaimana ini dihasilkan dapat ditemukan di sini. |
Anotasi
Di pustaka runtime fungsi Java, gunakan @SQLTrigger anotasi (com.microsoft.azure.functions.sql.annotation.SQLTrigger) pada parameter yang nilainya akan berasal dari Azure SQL. Anotasi ini mendukung elemen berikut:
| Elemen | Deskripsi |
|---|---|
| nama | Harus diisi. Nama parameter yang diikat pemicu. |
| tableName | Harus diisi. Nama tabel yang dipantau oleh pemicu. |
| connectionStringSetting | Harus diisi. Nama pengaturan aplikasi yang berisi string koneksi untuk database yang berisi tabel yang dipantau untuk perubahan. Nama pengaturan string koneksi sesuai dengan pengaturan aplikasi (di local.settings.json untuk pengembangan lokal) yang berisi string koneksi ke instans Azure SQL atau SQL Server. |
| LeasesTableName | Opsional. Nama tabel yang digunakan untuk menyimpan sewa. Jika tidak ditentukan, nama tabel sewa akan Leases_{FunctionId}_{TableId}. Informasi lebih lanjut tentang bagaimana ini dihasilkan dapat ditemukan di sini. |
Konfigurasi
Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.
| Properti function.json | Deskripsi |
|---|---|
| nama | Harus diisi. Nama parameter yang diikat pemicu. |
| jenis | Harus diisi. Harus diatur ke sqlTrigger. |
| arah | Harus diisi. Harus diatur ke in. |
| tableName | Harus diisi. Nama tabel yang dipantau oleh pemicu. |
| connectionStringSetting | Harus diisi. Nama pengaturan aplikasi yang berisi string koneksi untuk database yang berisi tabel yang dipantau untuk perubahan. Nama pengaturan string koneksi sesuai dengan pengaturan aplikasi (di local.settings.json untuk pengembangan lokal) yang berisi string koneksi ke instans Azure SQL atau SQL Server. |
| LeasesTableName | Opsional. Nama tabel yang digunakan untuk menyimpan sewa. Jika tidak ditentukan, nama tabel sewa akan Leases_{FunctionId}_{TableId}. Informasi lebih lanjut tentang bagaimana ini dihasilkan dapat ditemukan di sini. |
Konfigurasi Opsional
Pengaturan opsional berikut dapat dikonfigurasi untuk pemicu SQL untuk pengembangan lokal atau untuk penyebaran cloud.
host.json
Bagian ini menjelaskan pengaturan konfigurasi yang tersedia untuk pengikatan ini di versi 2.x dan yang lebih baru. Pengaturan dalam file host.json berlaku untuk semua fungsi dalam instans aplikasi fungsi. Untuk informasi selengkapnya tentang pengaturan konfigurasi aplikasi fungsi, lihat referensihost.json untuk Azure Functions.
| Pengaturan | Bawaan | Deskripsi |
|---|---|---|
| MaxBatchSize | 100 | Jumlah maksimum perubahan yang diproses dengan setiap iterasi perulangan pemicu sebelum dikirim ke fungsi yang dipicu. |
| PollingIntervalMs | 1000 | Penundaan dalam milidetik antara memproses setiap batch perubahan. (1000 ms adalah 1 detik) |
| MaxChangesPerWorker | 1000 | Batas atas jumlah perubahan yang tertunda dalam tabel pengguna yang diizinkan per pekerja aplikasi. Jika jumlah perubahan melebihi batas ini, hal ini dapat mengakibatkan peluasan skala. Pengaturan hanya berlaku untuk Azure Function Apps dengan penskalaan berbasis runtime diaktifkan. |
Contoh file host.json
Berikut adalah contoh file host.json dengan pengaturan opsional:
{
"version": "2.0",
"extensions": {
"Sql": {
"MaxBatchSize": 300,
"PollingIntervalMs": 1000,
"MaxChangesPerWorker": 100
}
},
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
},
"logLevel": {
"default": "Trace"
}
}
}
local.setting.json
File local.settings.json menyimpan pengaturan aplikasi dan pengaturan yang digunakan oleh alat pengembangan lokal. Pengaturan di file local.settings.json hanya digunakan saat Anda menjalankan proyek secara lokal. Saat Anda menerbitkan proyek ke Azure, pastikan juga untuk menambahkan pengaturan yang diperlukan ke pengaturan aplikasi untuk aplikasi fungsi.
Penting
Karena local.settings.json mungkin mencakup rahasia, seperti string koneksi, Anda tidak boleh menyimpannya di repositori jarak jauh. Alat yang mendukung Fungsi menyediakan cara untuk menyinkronkan pengaturan dalam file local.settings.json dengan pengaturan aplikasi di aplikasi fungsi tempat proyek Anda digunakan.
| Pengaturan | Bawaan | Deskripsi |
|---|---|---|
| Sql_Trigger_BatchSize | 100 | Jumlah maksimum perubahan yang diproses dengan setiap iterasi perulangan pemicu sebelum dikirim ke fungsi yang dipicu. |
| Sql_Trigger_PollingIntervalMs | 1000 | Penundaan dalam milidetik antara memproses setiap batch perubahan. (1000 ms adalah 1 detik) |
| Sql_Trigger_MaxChangesPerWorker | 1000 | Batas atas jumlah perubahan yang tertunda dalam tabel pengguna yang diizinkan per pekerja aplikasi. Jika jumlah perubahan melebihi batas ini, hal ini dapat mengakibatkan peluasan skala. Pengaturan hanya berlaku untuk Azure Function Apps dengan penskalaan berbasis runtime diaktifkan. |
Contoh file local.settings.json
Berikut adalah contoh file local.settings.json dengan pengaturan opsional:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"SqlConnectionString": "",
"Sql_Trigger_MaxBatchSize": 300,
"Sql_Trigger_PollingIntervalMs": 1000,
"Sql_Trigger_MaxChangesPerWorker": 100
}
}
Menyiapkan pelacakan perubahan (diperlukan)
Menyiapkan pelacakan perubahan untuk digunakan dengan pemicu Azure SQL memerlukan dua langkah. Langkah-langkah ini dapat diselesaikan dari alat SQL apa pun yang mendukung menjalankan kueri, termasuk Visual Studio Code, Azure Data Studio, atau SQL Server Management Studio.
Aktifkan pelacakan perubahan pada database SQL, ganti
your database namedengan nama database tempat tabel yang akan dipantau berada:ALTER DATABASE [your database name] SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);Opsi
CHANGE_RETENTIONmenentukan periode waktu di mana informasi pelacakan perubahan (riwayat perubahan) disimpan. Retensi riwayat perubahan oleh database SQL dapat memengaruhi fungsionalitas pemicu. Misalnya, jika Fungsi Azure dinonaktifkan selama beberapa hari lalu dilanjutkan, database akan berisi perubahan yang terjadi dalam dua hari terakhir dalam contoh penyiapan di atas.Opsi
AUTO_CLEANUPini digunakan untuk mengaktifkan atau menonaktifkan tugas pembersihan yang menghapus informasi pelacakan perubahan lama. Jika masalah sementara yang mencegah pemicu berjalan, menonaktifkan pembersihan otomatis dapat berguna untuk menjeda penghapusan informasi yang lebih lama dari periode retensi hingga masalah diselesaikan.Informasi selengkapnya tentang opsi pelacakan perubahan tersedia dalam dokumentasi SQL.
Aktifkan pelacakan perubahan pada tabel, ganti
your table namedengan nama tabel yang akan dipantau (mengubah skema jika sesuai):ALTER TABLE [dbo].[your table name] ENABLE CHANGE_TRACKING;Pemicu harus memiliki akses baca pada tabel yang dipantau untuk perubahan dan tabel sistem pelacakan perubahan. Setiap pemicu fungsi memiliki tabel pelacakan perubahan terkait dan tabel sewa dalam skema
az_func. Tabel ini dibuat oleh pemicu jika belum ada. Informasi selengkapnya tentang struktur data ini tersedia dalam dokumentasi pustaka pengikatan Azure SQL.
Aktifkan penskalakan berbasis runtime
Secara opsional, fungsi Anda dapat menskalakan secara otomatis berdasarkan jumlah perubahan yang tertunda untuk diproses dalam tabel pengguna. Untuk memungkinkan fungsi Anda menskalakan dengan benar pada paket Premium saat menggunakan pemicu SQL, Anda perlu mengaktifkan pemantauan skala runtime.
Di portal Microsoft Azure, di aplikasi fungsi Anda, pilih Konfigurasi.
Pada tab Pengaturan runtime fungsi , untuk Pemantauan Skala Runtime, pilih Aktif.
Coba lagi dukungan
Informasi lebih lanjut tentang dukungan coba lagi pemicu SQL dan tabel sewa tersedia di repositori GitHub.
Percobaan ulang startup
Jika pengecualian terjadi selama startup, maka runtime host secara otomatis mencoba memulai ulang listener pemicu dengan strategi backoff eksponensial. Percobaan ulang ini berlanjut hingga pendengar berhasil dimulai atau pengaktifan dibatalkan.
Percobaan ulang koneksi yang rusak
Jika fungsi berhasil dimulai tetapi kemudian kesalahan menyebabkan koneksi terputus (seperti server offline) maka fungsi terus mencoba dan membuka kembali koneksi sampai fungsi dihentikan atau koneksi berhasil. Jika koneksi berhasil dibuat ulang, koneksi akan mengambil perubahan pemrosesan yang ditinggalkannya.
Perhatikan bahwa percobaan ulang ini berada di luar logika coba lagi koneksi menganggur bawaan yang dimiliki SqlClient yang dapat dikonfigurasi dengan ConnectRetryCount opsi dan ConnectRetryIntervalstring koneksi. Percobaan ulang koneksi menganggur bawaan dicoba terlebih dahulu dan jika mereka gagal terhubung kembali maka pengikatan pemicu mencoba untuk membangun kembali koneksi itu sendiri.
Percobaan ulang pengecualian fungsi
Jika pengecualian terjadi dalam fungsi pengguna saat memproses perubahan, maka batch baris yang saat ini sedang diproses dicoba lagi dalam 60 detik. Perubahan lain diproses seperti biasa selama waktu ini, tetapi baris dalam batch yang menyebabkan pengecualian diabaikan sampai periode batas waktu telah berlalu.
Jika eksekusi fungsi gagal lima kali berturut-turut untuk baris tertentu, baris tersebut sepenuhnya diabaikan untuk semua perubahan di masa mendatang. Karena baris dalam batch tidak deterministik, baris dalam batch yang gagal mungkin berakhir dalam batch yang berbeda dalam pemanggilan berikutnya. Ini berarti bahwa tidak semua baris dalam batch yang gagal harus diabaikan. Jika baris lain dalam batch adalah baris yang menyebabkan pengecualian, baris "baik" mungkin berakhir di batch yang berbeda yang tidak gagal dalam pemanggilan di masa mendatang.