Referensi teknis Konektor SQL Generik

Artikel ini menjelaskan Konektor SQL Generik. Artikel ini berlaku untuk produk berikut:

Untuk MIM2016, Konektor tersedia sebagai unduhan dari Pusat Unduhan Microsoft.

Untuk melihat Konektor ini beraksi, lihat artikel langkah demi langkah Konektor SQL Generik .

Catatan

Microsoft Entra ID sekarang menyediakan solusi berbasis agen ringan untuk menyediakan pengguna ke dalam database SQL, tanpa memerlukan penyebaran sinkronisasi MIM. Sebaiknya gunakan untuk provisi pengguna keluar. Pelajari lebih lanjut.

Gambaran Umum Konektor SQL Generik

Konektor SQL Generik memungkinkan Anda mengintegrasikan layanan sinkronisasi dengan sistem database yang menawarkan konektivitas ODBC.

Dari perspektif tingkat tinggi, fitur berikut didukung oleh rilis konektor saat ini:

Fitur Dukungan
Sumber data tersambung Konektor didukung dengan semua driver ODBC 64-bit*. Ini telah diuji dengan yang berikut:
  • Microsoft SQL Server & SQL Azure
  • IBM DB2 11.5.8
  • Oracle 11g
  • Oracle 12c dan 18c
  • Oracle 21c dan 23c
  • MySQL 5.x
  • MySQL 8.x
  • Postgres
  • Skenario
  • Manajemen Siklus Hidup Objek
  • Manajemen Kata Sandi
  • Operasional
  • Impor Penuh dan Impor Delta, Ekspor
  • Untuk Ekspor: Tambahkan, Hapus, Perbarui, dan Ganti
  • Atur Kata Sandi, Ubah Kata Sandi
  • Skema
  • Penemuan dinamis objek dan atribut
  • Prasyarat

    Sebelum Anda menggunakan Konektor, pastikan Anda memiliki yang berikut ini di server sinkronisasi:

    • Microsoft .NET 4.6.2 Framework atau yang lebih baru
    • Driver klien ODBC 64-bit
    • Jika Anda menggunakan konektor untuk berkomunikasi dengan Oracle 12c, ini memerlukan Oracle Instant Client 12.2.0.1 atau yang lebih baru dengan paket ODBC.
    • Jika Anda menggunakan konektor untuk berkomunikasi dengan Oracle 18c-23c, ini memerlukan Oracle Instant Client 18-23 atau yang lebih baru dengan Paket ODBC, dan variabel sistem NLS_LANG yang akan diatur untuk mendukung karakter UTF8, misalnya NLS_LANG=AMERICAN_AMERICA. AL32UTF8.
    • Konektor ini menggunakan pernyataan yang disiapkan SQL dan beberapa pernyataan per transaksi. Beberapa sistem RDBM mungkin memiliki masalah dalam driver ODBC mereka yang terkait dengan penanganan transaksi, pernyataan SQL yang disiapkan sisi server dan beberapa pernyataan dalam transaksi yang sama. Harap konfigurasikan opsi koneksi DSN Anda yang sesuai untuk memastikan pernyataan tersebut dikirim dengan benar ke database Anda., Misalnya, Driver MYSQL ODBC versi 8.0.32 memerlukan opsi NO_SSPS=1 dan MULTI_STATEMENTS=1. Opsi lain seperti 'autocommit' atau 'penerapan pada operasi yang berhasil saja' dapat memengaruhi bagaimana ekspor batch ditangani; konsultasikan dengan administrator database Anda untuk detailnya. Untuk memecahkan masalah selama ekspor, atur ukuran batch ekspor ke 1 dan aktifkan pengelogan verbose konektor.

    Menyebarkan konektor ini mungkin memerlukan perubahan pada konfigurasi database serta perubahan konfigurasi pada MIM. Untuk penyebaran yang melibatkan MIM dengan server database pihak ketiga di lingkungan produksi, sebaiknya pelanggan bekerja dengan vendor database mereka, atau mitra penyebaran untuk bantuan, panduan, dan dukungan untuk integrasi ini.

    Izin di sumber data yang tersambung

    Untuk membuat atau melakukan salah satu tugas yang didukung di konektor SQL Generik, Anda harus memiliki:

    • db_datareader
    • db_datawriter

    Port dan protokol

    Agar port yang diperlukan agar driver ODBC berfungsi, lihat dokumentasi vendor database.

    Membuat Konektor baru

    Untuk Membuat konektor SQL Generik, di Layanan Sinkronisasi pilih Agen Manajemen dan Buat. Pilih Konektor SQL Generik (Microsoft).

    Halaman CreateConnector 1

    Konektivitas

    Konektor menggunakan file ODBC DSN untuk konektivitas. Buat file DSN menggunakan Sumber Data ODBC yang ditemukan di menu mulai di bawah Alat Administratif. Di alat administratif, buat File DSN sehingga dapat diberikan ke Konektor.

    Halaman CreateConnector 2

    Layar Konektivitas adalah yang pertama saat Anda membuat Konektor SQL Generik baru. Pertama-tama Anda perlu memberikan informasi berikut:

    • Jalur file DSN
    • Autentikasi
      • Nama Pengguna
      • Kata sandi

    Database harus mendukung salah satu metode autentikasi ini:

    • Autentikasi Windows: Database autentikasi menggunakan kredensial Windows untuk memverifikasi pengguna. Nama pengguna/kata sandi yang ditentukan digunakan untuk mengautentikasi dengan database. Akun ini memerlukan izin ke database.
    • Autentikasi SQL: Database autentikasi menggunakan nama pengguna/kata sandi yang ditentukan satu layar Konektivitas untuk menyambungkan ke database. Jika Anda menyimpan nama pengguna/pasword dalam file DSN, kredensial yang disediakan pada layar Konektivitas telah diutamakan.
    • Azure SQL Autentikasi database: Untuk informasi selengkapnya, lihat Menyambungkan ke SQL Database melalui autentikasi Microsoft Entra.

    DN adalah Jangkar: Jika Anda memilih opsi ini, DN juga digunakan sebagai atribut jangkar. Ini dapat digunakan untuk implementasi sederhana tetapi juga memiliki batasan berikut:

    • Konektor hanya mendukung satu jenis objek. Oleh karena itu, atribut referensi apa pun hanya dapat mereferensikan jenis objek yang sama.

    Jenis Ekspor: Penggantian Objek: Selama ekspor, ketika hanya beberapa atribut yang telah berubah, seluruh objek dengan semua atribut diekspor dan menggantikan objek yang ada.

    Skema 1 (Deteksi jenis objek)

    Pada halaman ini, Anda akan mengonfigurasi bagaimana Konektor akan menemukan berbagai jenis objek dalam database.

    Setiap jenis objek disajikan sebagai partisi dan dikonfigurasi lebih lanjut pada Mengonfigurasi Partisi dan Hierarki.

    gambar schema1a

    Metode deteksi Jenis Objek: Konektor mendukung metode deteksi jenis objek ini.

    • Nilai Tetap: Anda menyediakan daftar jenis objek dengan daftar yang dipisahkan koma. Misalnya: User,Group,Department.
      gambar schema1b
    • Tabel/Tampilan/Prosedur Tersimpan: Berikan nama prosedur tabel/tampilan/tersimpan lalu nama kolom yang menyediakan daftar jenis objek. Jika Anda menggunakan prosedur tersimpan, berikan juga parameter untuk prosedur tersebut dalam format [Name]:[Direction]:[Value]. Berikan setiap parameter pada baris terpisah (gunakan Ctrl+Enter untuk mendapatkan baris baru).
      gambar schema1c
    • Kueri SQL: Opsi ini memungkinkan Anda menyediakan kueri SQL yang mengembalikan satu kolom dengan jenis objek, misalnya SELECT [Column Name] FROM TABLENAME. Kolom yang dikembalikan harus berjenis string (varchar).

    Skema 2 (Deteksi jenis atribut)

    Pada halaman ini, Anda akan mengonfigurasi bagaimana nama dan jenis atribut akan terdeteksi. Opsi konfigurasi dicantumkan untuk setiap jenis objek yang terdeteksi di halaman sebelumnya.

    gambar schema2a

    Metode deteksi Jenis Atribut: Konektor mendukung metode deteksi jenis atribut ini dengan setiap jenis objek yang terdeteksi di layar Skema 1.

    • Tabel/Tampilan/Prosedur Tersimpan: Berikan nama tabel/tampilan/prosedur tersimpan yang harus digunakan untuk menemukan nama atribut. Jika Anda menggunakan prosedur tersimpan, berikan juga parameter untuk prosedur tersebut dalam format [Name]:[Direction]:[Value]. Berikan setiap parameter pada baris terpisah (gunakan Ctrl+Enter untuk mendapatkan baris baru). Untuk mendeteksi nama atribut dalam atribut multinilai, berikan daftar Tabel atau Tampilan yang dipisahkan koma. Skenario multinila tidak didukung ketika tabel induk dan anak memiliki nama kolom yang sama.
    • Kueri SQL: Opsi ini memungkinkan Anda menyediakan kueri SQL yang mengembalikan satu kolom dengan nama atribut, misalnya SELECT [Column Name] FROM TABLENAME. Kolom yang dikembalikan harus berjenis string (varchar).

    Skema 3 (Tentukan jangkar dan DN)

    Halaman ini memungkinkan Anda mengonfigurasi atribut jangkar dan DN untuk setiap jenis objek yang terdeteksi. Anda dapat memilih beberapa atribut untuk membuat jangkar unik.

    gambar schema3a

    • Atribut multinilai dan Boolean tidak tercantum.

    • Atribut yang sama tidak dapat digunakan untuk DN dan jangkar, kecuali DN adalah Jangkar dipilih pada halaman Konektivitas.

    • Jika DN adalah Jangkar dipilih di halaman Konektivitas, halaman ini hanya memerlukan atribut DN. Atribut ini juga akan digunakan sebagai atribut jangkar.

      gambar schema3b

    Skema 4 (Tentukan jenis atribut, referensi, dan arah)

    Halaman ini memungkinkan Anda mengonfigurasi jenis atribut, seperti bilangan bulat, biner, atau Boolean, dan arah untuk setiap atribut. Semua atribut dari skema halaman 2 dicantumkan termasuk atribut multinilai.

    gambar schema4a

    • DataType: Digunakan untuk memetakan jenis atribut ke jenis yang diketahui oleh mesin sinkronisasi. Defaultnya adalah menggunakan jenis yang sama seperti yang terdeteksi dalam skema SQL, tetapi DateTime dan Referensi tidak mudah dideteksi. Untuk itu, Anda perlu menentukan TanggalWaktu atau Referensi.
    • Arah: Anda dapat mengatur arah atribut ke Impor, Ekspor, atau ImportExport. ImportExport adalah default.

    gambar schema4b

    Catatan:

    • Jika jenis atribut tidak dapat dideteksi oleh Konektor, jenis data String akan digunakan.
    • Tabel berlapis dapat dianggap sebagai tabel database satu kolom. Oracle menyimpan baris tabel berlapis tanpa urutan tertentu. Namun, ketika Anda mengambil tabel berlapis ke dalam variabel PL/SQL, baris diberikan subskrip berturut-turut mulai dari 1. Itu memberi Anda akses seperti array ke baris individual.
    • VARRYS tidak didukung di konektor.

    Skema 5 (Tentukan partisi untuk atribut referensi)

    Pada halaman ini, Anda mengonfigurasi untuk semua atribut referensi yang dirujuk oleh partisi (jenis objek) atribut.

    gambar skema5

    Jika Anda menggunakan DN adalah jangkar, maka Anda harus menggunakan jenis objek yang sama dengan yang Anda rujuk. Anda tidak dapat mereferensikan tipe objek lain.

    Catatan

    Mulai pembaruan Maret 2017 sekarang ada opsi untuk "*" Ketika opsi ini dipilih maka semua jenis anggota yang mungkin akan diimpor.

    gambar globalparameters3

    Penting

    Pada Mei 2017 opsi "*" alias apa pun telah diubah untuk mendukung alur impor dan ekspor. Jika Anda ingin menggunakan opsi ini, tabel/tampilan multinilai Anda harus memiliki atribut yang berisi jenis objek.

    multivalued opsi apa pun sebelum gambar


    Jika "*" dipilih maka nama kolom dengan jenis objek juga harus ditentukan.
    multivalued opsi apa pun setelah gambar

    Setelah mengimpor, Anda akan melihat sesuatu yang mirip dengan gambar di bawah ini:

    gambar globalparameters31

    Parameter Global

    Halaman Parameter Global digunakan untuk mengonfigurasi Impor Delta, format Tanggal/Waktu, dan Metode kata sandi.

    gambar globalparameters1

    Konektor SQL Generik mendukung metode berikut untuk Impor Delta:

    • Pemicu: Lihat Menghasilkan Tampilan Delta Menggunakan Pemicu.
    • Marka air: Pendekatan generik yang dapat digunakan dengan database apa pun. Kueri marka air telah diisi sebelumnya berdasarkan vendor database. Kolom marka air harus ada di setiap tabel/tampilan yang digunakan. Kolom ini harus melacak sisipkan dan perbarui ke tabel sebagai dan tabel dependennya (multinilai atau turunan). Jam antara Layanan Sinkronisasi dan server database harus disinkronkan. Jika tidak, beberapa entri dalam impor delta mungkin dihilangkan.
      Batasan:
      • Strategi marka air tidak mendukung objek yang dihapus.
    • Rekam jepret: (Hanya berfungsi dengan Microsoft SQL Server) Menghasilkan Tampilan Delta Menggunakan Rekam Jepret
    • Pelacakan Perubahan: (Hanya berfungsi dengan Microsoft SQL Server) Tentang Pelacakan Perubahan
      Keterbatasan:
      • Jangkar & atribut DN harus menjadi bagian dari kunci primer untuk objek yang dipilih dalam tabel.
      • Kueri SQL tidak didukung selama Impor dan Ekspor dengan Pelacakan Perubahan.

    Parameter Tambahan: Tentukan Zona Waktu Server Database yang menunjukkan tempat server Database Anda berada. Nilai ini digunakan untuk mendukung berbagai format atribut tanggal & waktu.

    Konektor selalu menyimpan tanggal dan tanggal-waktu dalam format UTC. Agar dapat mengonversi tanggal dan waktu dengan benar, zona waktu server database dan format yang digunakan harus ditentukan. Format harus diekspresikan dalam format .NET.

    Selama ekspor setiap atribut tanggal waktu harus diberikan ke Konektor dalam format waktu UTC.

    gambar globalparameters2

    Konfigurasi Kata Sandi: Konektor menyediakan kemampuan sinkronisasi kata sandi dan mendukung set dan mengubah kata sandi.

    Konektor menyediakan dua metode untuk mendukung sinkronisasi kata sandi:

    • Prosedur Tersimpan: Metode ini memerlukan dua prosedur tersimpan untuk mendukung Set & Ubah kata sandi. Ketik semua parameter untuk menambahkan dan mengubah operasi kata sandi di Atur Kata Sandi SP dan Ubah Parameter SP Kata Sandi masing-masing sesuai contoh di bawah ini. gambar globalparameters32
    • Ekstensi Kata Sandi: Metode ini memerlukan DLL ekstensi Kata Sandi (Anda perlu memberikan Nama DLL Ekstensi yang mengimplementasikan antarmuka IMAExtensible2Password ). Rakitan ekstensi kata sandi harus ditempatkan di folder ekstensi sehingga konektor dapat memuat DLL saat runtime. gambar globalparameters4

    Anda juga harus mengaktifkan Manajemen Kata Sandi di halaman Konfigurasi Ekstensi . gambar globalparameters5

    Mengonfigurasi Partisi dan Hierarki

    Pada halaman partisi dan hierarki, pilih semua jenis objek. Setiap jenis objek adalah partisinya sendiri.

    gambar partitions1

    Anda juga dapat mengganti nilai yang ditentukan pada halaman Konektivitas atau Parameter Global .

    gambar partitions2

    Mengonfigurasi Anchors

    Halaman ini bersifat baca-saja karena jangkar telah ditentukan. Atribut jangkar yang dipilih selalu ditambahkan dengan jenis objek untuk memastikan atribut tersebut tetap unik di seluruh jenis objek.

    gambar jangkar

    Mengonfigurasi Parameter Langkah Eksekusi

    Langkah-langkah ini dikonfigurasi pada profil eksekusi pada Konektor. Konfigurasi ini melakukan pekerjaan impor dan ekspor data yang sebenarnya.

    Impor Penuh dan Delta

    Konektor SQL Generik mendukung Impor Penuh dan Delta menggunakan metode berikut:

    • Tabel
    • Tampilan
    • Prosedur Tersimpan
    • SQL Query

    gambar runstep1

    Tabel/Tampilan
    Untuk mengimpor atribut multinilai untuk objek, Anda harus memberikan nama tabel/tampilan di Nama tabel/tampilan Multinilai dan kondisi gabungan masing-masing dalam kondisi Gabung dengan tabel induk. Jika ada lebih dari satu tabel multinilai di sumber data, Anda bisa menggunakan gabungan untuk satu tampilan.

    Penting

    Agen manajemen SQL Generik hanya dapat bekerja dengan satu tabel multinilai. Jangan masukkan ke dalam Nama tabel/tampilan Multinilai lebih dari satu nama tabel. Ini adalah batasan SQL Generik.

    Contoh: Anda ingin mengimpor objek Karyawan dan semua atribut multinilainya. Ada dua tabel, bernama Karyawan (tabel utama) dan Departemen (multinilai). Lakukan tindakan berikut:

    • Ketik Karyawan di Tabel/Tampilan/SP.
    • Ketik Departemen dalam Nama tabel/tampilan Multinilai.
    • Ketik kondisi gabungan antara Departemen & Karyawan dalam Kondisi Bergabung, misalnya Employee.DEPTID=Department.DepartmentID. gambar runstep2

    Prosedur tersimpan
    gambar runstep3

    • Jika Anda memiliki banyak data, disarankan untuk menerapkan penomoran halaman dengan Prosedur Tersimpan Anda.
    • Agar Prosedur Tersimpan Anda mendukung penomoran halaman, Anda perlu menyediakan Indeks Mulai dan Indeks Akhir. Lihat: Secara efisien Melakukan Paging Melalui Data Dalam Jumlah Besar.
    • @StartIndex dan @EndIndex diganti pada waktu eksekusi dengan nilai ukuran halaman masing-masing yang dikonfigurasi pada halaman Konfigurasi Langkah . Misalnya, ketika konektor mengambil halaman pertama dan ukuran halaman diatur 500, dalam situasi @StartIndex seperti itu adalah 1 dan @EndIndex 500. Nilai-nilai ini meningkat saat konektor mengambil halaman berikutnya dan mengubah @StartIndex nilai & @EndIndex .
    • Untuk menjalankan Prosedur Tersimpan berparameter, berikan parameter dalam [Name]:[Direction]:[Value] format. Masukkan setiap parameter pada baris terpisah (Gunakan Ctrl + Enter untuk mendapatkan baris baru).
    • Konektor SQL generik juga mendukung operasi Impor dari Server Tertaut di Microsoft SQL Server. Jika informasi harus diambil dari Tabel di Server tertaut, maka Tabel harus disediakan dalam format: [ServerName].[Database].[Schema].[TableName]
    • Konektor SQL Generik hanya mendukung objek yang memiliki struktur serupa (nama alias dan jenis data) antara informasi langkah eksekusi dan deteksi skema. Jika objek yang dipilih dari skema dan informasi yang diberikan pada langkah eksekusi berbeda, maka Konektor SQL tidak dapat mendukung jenis skenario ini.

    Kueri SQL
    gambar runstep4

    gambar runstep5

    Penting

    CRLF atau karakter baris baru berfungsi sebagai pemisah di antara beberapa pernyataan.

    Sampel kueri SQL dengan penomoran halaman - kueri yang salah, tidak akan berfungsi karena karakter baris baru digunakan:

    WITH A AS 
      (select dense_rank() over (order by BusinessEntityID) 
        rownumber, BusinessEntityID, DeptID, NationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, HireDate, ModifiedDate, Password 
        from Employees
      ) select * from A where rownumber between @StartIndex and @EndIndex
    

    Contoh kueri SQL dengan penomoran halaman - kueri yang benar:

    WITH A AS (select dense_rank() over (order by BusinessEntityID) rownumber, BusinessEntityID, DeptID, NationalIDNumber, LoginID, JobTitle, BirthDate, MaritalStatus, HireDate, ModifiedDate, Password from Employees) select * from A where rownumber between @StartIndex and @EndIndex
    
    • Beberapa kueri tataan hasil tidak didukung.
    • Kueri SQL mendukung penomoran halaman dan menyediakan Indeks Mulai dan Indeks Akhir sebagai variabel untuk mendukung penomoran halaman.

    Impor Delta

    gambar runstep6

    Konfigurasi Impor Delta memerlukan beberapa konfigurasi lagi dibandingkan dengan Impor Penuh.

    • Jika Anda memilih pendekatan Pemicu atau Rekam Jepret untuk melacak perubahan delta, berikan tabel Riwayat atau database Rekam Jepret di kotak Nama database Tabel Riwayat atau Rekam Jepret .
    • Anda juga perlu memberikan kondisi gabungan antara tabel Riwayat dan tabel Induk, misalnya Employee.ID=History.EmployeeID
    • Untuk melacak transaksi pada tabel induk dari tabel riwayat, Anda harus memberikan nama kolom yang berisi informasi operasi (Tambahkan/Perbarui/Hapus).
    • Jika Anda memilih Cap Air untuk melacak perubahan delta, berikan nama kolom yang berisi informasi operasi di Nama Kolom Marka Air.
    • Kolom atribut jenis perubahan diperlukan untuk jenis perubahan. Kolom ini memetakan perubahan yang terjadi dalam tabel utama atau tabel multinilai ke jenis perubahan dalam tampilan delta. Kolom ini dapat berisi jenis perubahan Modify_Attribute untuk perubahan tingkat atribut atau jenis perubahan Tambahkan, Ubah, atau Hapus untuk jenis perubahan tingkat objek. Jika itu adalah sesuatu selain nilai default Tambahkan, Ubah, atau Hapus, maka Anda dapat menentukan nilai tersebut menggunakan opsi ini.

    Ekspor

    gambar runstep7

    Konektor SQL Generik mendukung Ekspor menggunakan empat metode yang didukung seperti:

    • Tabel
    • Tampilan
    • Prosedur Tersimpan
    • SQL Query

    Tabel/Tampilan
    Jika Anda memilih opsi Tabel/Tampilan, konektor akan menghasilkan kueri masing-masing untuk melakukan Ekspor.

    Prosedur tersimpan
    gambar runstep8

    Jika Anda memilih opsi Prosedur Tersimpan, Ekspor memerlukan tiga prosedur Tersimpan yang berbeda untuk melakukan operasi Sisipkan/Perbarui/Hapus.

    • Tambahkan Nama SP: SP ini berjalan jika ada objek yang datang ke konektor untuk penyisipan dalam tabel masing-masing.
    • Perbarui Nama SP: SP ini berjalan jika ada objek yang datang ke konektor untuk diperbarui dalam tabel masing-masing.
    • Hapus Nama SP: SP ini berjalan jika ada objek yang datang ke konektor untuk dihapus dalam tabel masing-masing.
    • Atribut yang dipilih dari skema yang digunakan sebagai nilai parameter ke prosedur tersimpan. Misalnya, @EmployeeName: INPUT: EmployeeName (EmployeeName dipilih dalam skema konektor dan konektor menggantikan nilai masing-masing saat melakukan ekspor)
    • Untuk menjalankan prosedur tersimpan berparameter, berikan parameter dalam [Name]:[Direction]:[Value] format. Masukkan setiap parameter pada baris terpisah (Gunakan Ctrl + Enter untuk mendapatkan baris baru).

    Kueri SQL
    gambar runstep9

    Jika Anda memilih opsi kueri SQL, Ekspor memerlukan tiga kueri berbeda untuk melakukan operasi Sisipkan/Perbarui/Hapus.

    • Sisipkan Kueri: Kueri ini berjalan jika ada objek yang datang ke konektor untuk penyisipan dalam tabel masing-masing.
    • Perbarui Kueri: Kueri ini berjalan jika ada objek yang datang ke konektor untuk diperbarui dalam tabel masing-masing.
    • Hapus Kueri: Kueri ini berjalan jika ada objek yang datang ke konektor untuk dihapus dalam tabel masing-masing.
    • Atribut yang dipilih dari skema yang digunakan sebagai nilai parameter ke kueri, misalnya Insert into Employee (ID, Name) Values (@ID, @EmployeeName)

    Penting

    CRLF atau karakter baris baru berfungsi sebagai pemisah di antara beberapa pernyataan.

    Sampel kueri SQL pembaruan multi-langkah - karakter baris baru digunakan untuk memisahkan pernyataan SQL:

    update Employee set jobTitle=@JOBTITLE where BusinessEntityID=@BUSINESSENTITYID
    insert into ChangeLog VALUES (@BUSINESSENTITYID)
    

    Pemecahan Masalah