Dengan melihat contoh lain, saya mendapatkan yang berikut tetapi tampaknya tidak berfungsi seperti yang saya inginkan: Saya ingin itu hanya memperbarui informasi yang dimodifikasi jika QtyToRepair
nilainya telah diperbarui ... tetapi tidak berhasil bahwa.
Jika saya berkomentar di mana maka informasi yang dimodifikasi diperbarui dalam setiap kasus. Seperti yang saya katakan, contoh lain membuat saya optimis. Setiap petunjuk dihargai. Terima kasih.
Walter
ALTER TRIGGER [dbo].[tr_SCHEDULE_Modified]
ON [dbo].[SCHEDULE]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
UPDATE SCHEDULE SET modified = GETDATE()
, ModifiedUser = SUSER_NAME()
, ModifiedHost = HOST_NAME()
FROM SCHEDULE S
INNER JOIN Inserted I on S.OrderNo = I.OrderNo and S.PartNumber = I.PartNumber
WHERE S.QtyToRepair <> I.QtyToRepair
END
sql
sql-server
triggers
Walter de Jong
sumber
sumber
update()
- ini hanya menguji jika kolom muncul dalam daftar pembaruan, dan selalu benar untuk sisipan. Itu tidak memeriksa apakah nilai kolom telah berubah, karena Anda mungkin memiliki lebih dari satu baris, di mana beberapa nilai telah berubah dan beberapa tidak.Jawaban:
Ada dua cara untuk pertanyaan Anda:
1- Gunakan Perintah Pembaruan di Pemicu Anda.
2- Gunakan Gabung antara Tabel yang disisipkan dan tabel yang dihapus
Ketika Anda menggunakan perintah pembaruan untuk tabel
SCHEDULE
dan AturQtyToRepair
Kolom ke nilai baru, jika nilai baru sama dengan nilai lama dalam satu atau beberapa baris, solusi 1 memperbarui semua baris yang diperbarui dalam tabel Jadwal tetapi solusi 2 memperbarui hanya menjadwalkan baris yang nilai lama tidak sama dengan yang baru nilai.sumber
inserted
tabel di kueri kedua? itu harus sama dengan tabel itu sendiri, bukan?fyi Kode yang saya dapatkan:
sumber
WHERE S.QtyToRepair <> I.QtyToRepair AND D.QtyToRepair <> I.QtyToRepair
tidak pernah aktif / cocok karena kriteria pertama tidak pernah benar - tabel yang dimasukkan selalu cocok dengan nilai tabel yang sebenarnya. Menggunakan `WHERE I.QtyToRepair <> D.QtyToRepair` adalah kuncinya bagi saya. JugaIF UPDATE (field)
bantuan dari beberapa pemicu penembakan.Seseorang harus memeriksa apakah
QtyToRepair
diperbarui pada awalnya.sumber
Anda ingin melakukan hal berikut:
Harap dicatat bahwa pemicu ini akan aktif setiap kali Anda memperbarui kolom tidak peduli apakah nilainya sama atau tidak.
sumber
Setiap kali catatan telah diperbarui, catatan akan "dihapus". Inilah contoh saya:
Ini bekerja dengan baik
sumber