Trigger trong SQL Server là các stored procedure đặc biệt được thực thi tự động để phản hồi với các đối tượng cơ sở dữ liệu, cơ sở dữ liệu và các sự kiện máy chủ. SQL Server cung cấp ba loại trigger:
INSERT
, UPDATE
và DELETE
dữ liệu xảy ra trên bảng.CREATE
, ALTER
và DROP
.LOGON
.Trong phần này, bạn sẽ tìm hiểu cách sử dụng câu lệnh CREATE TRIGGER
trong SQL Server để tạo một trigger mới.
Câu lệnh CREATE TRIGGER
cho phép bạn tạo một trigger mới sẽ được kích hoạt tự động bất cứ khi nào một sự kiện như INSERT
, DELETE
hoặc UPDATE
xảy ra đối với một bảng.
Sau đây minh họa cú pháp của câu lệnh CREATE TRIGGER
:
CREATE TRIGGER [schema_name.]trigger_name
ON table_name
AFTER {[INSERT],[UPDATE],[DELETE]}
[NOT FOR REPLICATION]
AS
{sql_statements}
Trong cú pháp này:
schema_name
là tên của lược đồ mà trigger thuộc. Tên lược đồ là tùy chọn.trigger_name
là tên do người dùng chỉ định cho trigger.table_name
là bảng sẽ áp dụng trigger.AFTER
. Sự kiện này có thể là INSERT
, UPDATE
hoặc DELETE
. Một trigger có thể kích hoạt với một hoặc nhiều sự kiện xảy ra trên bảng.NOT FOR REPLICATION
chỉ thị SQL Server không được kích hoạt trigger khi sửa đổi dữ liệu được thực hiện như một phần của quá trình sao chép.sql_statements
là một hoặc nhiều câu lệnh Transact-SQL được sử dụng để thực hiện các hành động sau khi một sự kiện xảy ra.SQL Server cung cấp hai bảng ảo đặc biệt cho trigger là bảng INSERTED
và DELETED
. SQL Server sử dụng các bảng này để thu thập dữ liệu của bản ghi đã sửa đổi trước và sau khi sự kiện xảy ra.
Bảng dưới đây cho thấy nội dung của bảng INSERTED
và DELETED
trước và sau mỗi sự kiện:
Sự kiện | Bảng INSERTED chứa | Bảng DELETED chứa |
---|---|---|
INSERT | Các bản ghi đã được insert | Trống |
UPDATE | Các bản ghi sau khi được update | Các bản ghi trước khi được update |
DELETE | Trống | Các bản ghi đã được delete |
Hãy xem một số ví dụ tạo trigger trong SQL Server. Chúng tôi sẽ sử dụng bảng production.products
trong cơ sở dữ liệu mẫu BikeStores để minh họa.
Câu lệnh sau đây tạo một bảng có tên production.product_audits
để ghi thông tin khi một sự kiện INSERT
hoặc DELETE
xảy ra đối với bảng production.products
:
CREATE TABLE production.product_audits
(
change_id INT IDENTITY PRIMARY KEY,
product_id INT NOT NULL,
product_name VARCHAR(255) NOT NULL,
brand_id INT NOT NULL,
category_id INT NOT NULL,
model_year SMALLINT NOT NULL,
list_price DEC(10,2) NOT NULL,
updated_at DATETIME NOT NULL,
operation CHAR(3) NOT NULL,
CHECK(operation = 'INS' or operation='DEL')
);
Bảng production.product_audits
có tất cả các cột từ bảng production.products
. Bên cạnh đó, nó được bổ sung thêm một vài cột để ghi lại những thay đổi ví dụ updated_at
, operation
và change_id
.
Đầu tiên, để tạo một trigger mới, bạn chỉ định tên của trigger và lược đồ mà trigger thuộc về sau mệnh đề CREATE TRIGGER
như sau:
CREATE TRIGGER production.trg_product_audit
Tiếp theo, bạn chỉ định tên của bảng trong mệnh đề ON
, trigger sẽ kích hoạt khi xảy ra sự kiện trên bảng này:
ON production.products
Sau đó, bạn liệt kê một hoặc nhiều sự kiện sẽ kích hoạt trigger trong mệnh đề AFTER
:
AFTER INSERT, DELETE
Phần thân của trigger bắt đầu bằng từ khóa AS
:
AS
BEGIN
Sau đó, bên trong thân của trigger, bạn thiết lập SET NOCOUNT ON
để ngăn chặn thông báo số lượng bản ghi bị ảnh hưởng bất cứ khi nào trigger được kích hoạt.
SET NOCOUNT ON;
Trigger sẽ INSERT
một bản ghi vào bảng production.product_audits
bất cứ khi nào một bản ghi được chèn vào hoặc xóa khỏi bảng production.products
. Dữ liệu để chèn vào bảng production.product_audits
được cung cấp từ bảng INSERTED
và DELETED
thông qua toán tử UNION ALL
như sau:
INSERT INTO production.product_audits
(
product_id,
product_name,
brand_id,
category_id,
model_year,
list_price,
updated_at,
operation
)
SELECT
i.product_id,
product_name,
brand_id,
category_id,
model_year,
i.list_price,
GETDATE(),
'INS'
FROM
inserted AS i
UNION ALL
SELECT
d.product_id,
product_name,
brand_id,
category_id,
model_year,
d.list_price,
getdate(),
'DEL'
FROM
deleted AS d;
Sau đây câu lệnh tạo trigger hoàn chỉnh:
CREATE TRIGGER production.trg_product_audit
ON production.products
AFTER INSERT, DELETE
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO production.product_audits(
product_id,
product_name,
brand_id,
category_id,
model_year,
list_price,
updated_at,
operation
)
SELECT
i.product_id,
product_name,
brand_id,
category_id,
model_year,
i.list_price,
GETDATE(),
'INS'
FROM
inserted i
UNION ALL
SELECT
d.product_id,
product_name,
brand_id,
category_id,
model_year,
d.list_price,
GETDATE(),
'DEL'
FROM
deleted d;
END
Cuối cùng, bạn thực thi câu lệnh trên để tạo trigger. Khi trigger được tạo, bạn có thể tìm thấy nó trong thư mục Triggers của bảng như trong hình sau:
Câu lệnh sau đây chèn một bản ghi mới vào bảng production.products
:
INSERT INTO production.products
(
product_name,
brand_id,
category_id,
model_year,
list_price
)
VALUES
(
'Test product',
1,
1,
2018,
599
);
Vì sự kiện INSERT
này, trigger production.trg_product_audit
đã được kích hoạt trên bảng production.products
và chèn một bản ghi vào bảng production.product_audits
.
Hãy xem nội dung của bảng production.product_audits
:
SELECT
*
FROM
production.product_audits;
Đây là đầu ra:
Câu lệnh sau xóa một bản ghi khỏi bảng production.products
:
DELETE FROM
production.products
WHERE
product_id = 322;
Đúng như dự đoán, trigger đã được kích hoạt và chèn bản ghi đã xóa vào bảng production.product_audits
:
SELECT
*
FROM
production.product_audits;
Hình ảnh sau đây cho thấy đầu ra:
Trong hướng dẫn này, bạn đã học cách tạo một kích hoạt trong SQL Server để đáp ứng với một hoặc nhiều sự kiện như chèn và xóa.
Trong phần này, bạn sẽ tìm hiểu cách sử dụng trigger INSTEAD OF
trong SQL Server để chèn dữ liệu vào bảng thông qua view.
Trigger INSTEAD OF
là một trigger cho phép bạn bỏ qua một câu lệnh INSERT
, DELETE
hoặc UPDATE
một bảng hoặc một view và thực thi câu lệnh khác được định nghĩa trong trigger. Các thao tác chèn, xóa hoặc cập nhật thực tế hoàn toàn không xảy ra.
Nói cách khác, trigger INSTEAD OF
bỏ qua một câu lệnh DML và thực thi các câu lệnh khác được định nghĩa trong trigger.
Dưới đây minh họa cú pháp về cách tạo trigger INSTEAD OF
:
CREATE TRIGGER [schema_name.] trigger_name
ON {table_name | view_name }
INSTEAD OF {[INSERT] [,] [UPDATE] [,] [DELETE] }
AS
{sql_statements}
Trong cú pháp này:
CREATE TRIGGER
.INSTEAD OF
như INSERT
, DELETE
hoặc UPDATE
. Trigger có thể được kích hoạt với một hoặc nhiều sự kiện.AS
. Phần thân của trigger có thể bao gồm một hoặc nhiều câu lệnh Transact-SQL.Một ví dụ điển hình của việc sử dụng trigger INSTEAD OF
là ghi đè thao tác chèn, cập nhật hoặc xóa trên view.
Giả sử, một ứng dụng cần chèn các thương hiệu mới vào bảng production.brands
. Tuy nhiên, các thương hiệu mới nên được lưu trữ trong một bảng khác được gọi là production.brand_approvals
để phê duyệt trước khi chèn vào bảng production.brands
.
Để thực hiện điều này, bạn tạo một view có tên là production.vw_brands
cho ứng dụng để chèn các thương hiệu mới. Nếu các thương hiệu được chèn vào view, một trigger INSTEAD OF
sẽ được kích hoạt để chèn các thương hiệu vào bảng production.brand_approvals
.
Hình ảnh sau đây minh họa quá trình:
Sơ đồ này không hiển thị tên lược đồ của tất cả các đối tượng cơ sở dữ liệu vì mục đích đơn giản.
Câu lệnh sau đây tạo một bảng mới có tên production.brand_approvals
để lưu trữ các thương hiệu đang chờ được phê duyệt:
CREATE TABLE production.brand_approvals(
brand_id INT IDENTITY PRIMARY KEY,
brand_name VARCHAR(255) NOT NULL
);
Câu lệnh sau đây tạo ra một view mới tên là production.vw_brands
dựa vào bảng production.brands
và production.brand_approvals
:
CREATE VIEW production.vw_brands
AS
SELECT
brand_name,
'Approved' approval_status
FROM
production.brands
UNION
SELECT
brand_name,
'Pending Approval' approval_status
FROM
production.brand_approvals;
Khi một bản ghi được chèn vào view production.vw_brands
, chúng ta cần chuyển nó tới bảng production.brand_approvals
thông qua trigger INSTEAD OF
như sau:
CREATE TRIGGER production.trg_vw_brands
ON production.vw_brands
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO production.brand_approvals (
brand_name
)
SELECT
i.brand_name
FROM
inserted i
WHERE
i.brand_name NOT IN (
SELECT
brand_name
FROM
production.brands
);
END
Trigger chèn tên thương hiệu mới vào bảng production.brand_approvals
nếu tên thương hiệu không tồn tại trong bảng production.brands
.
Bây giờ chúng ta hãy chèn một thương hiệu mới vào view production.vw_brands
để xem chuyện gì xảy ra nhé:
INSERT INTO production.vw_brands(brand_name)
VALUES('Eddy Merckx');
Câu lệnh INSERT
này đã kích hoạt trigger INSTEAD OF
để chèn một bản ghi mới vào bảng production.brand_approvals
.
Nếu bạn truy vấn dữ liệu từ view production.vw_brands
, bạn sẽ thấy một bản ghi mới xuất hiện:
SELECT
brand_name,
approval_status
FROM
production.vw_brands;
Câu lệnh sau đây cho thấy nội dung của bảng production.brand_approvals
:
SELECT
*
FROM
production.brand_approvals;
Trong phần này, bạn đã tìm hiểu về trigger INSTEAD OF
trong SQL Server và cách tạo trigger INSTEAD OF
để chèn dữ liệu vào bảng thông qua view.
Trong phần này, bạn sẽ tìm hiểu cách sử dụng trigger ngôn ngữ định nghĩa dữ liệu (Data Definition Language - DDL) của SQL Server để theo dõi các thay đổi được thực hiện đối với các đối tượng cơ sở dữ liệu.
Trigger DDL của SQL Server phản hồi các sự kiện máy chủ hoặc cơ sở dữ liệu hơn là các sửa đổi dữ liệu bảng. Những sự kiện này được tạo ra bởi các câu lệnh Transact-SQL thường bắt đầu với một trong những từ khóa sau CREATE
, ALTER
, DROP
, GRANT
, DENY
, REVOKE
hoặc UPDATE STATISTICS
.
Ví dụ: bạn có thể viết một trigger DDL để ghi nhật ký bất cứ khi nào người dùng thực thi câu lệnh CREATE TABLE
hoặc ALTER TABLE
.
Trigger DDL hữu ích trong các trường hợp sau:
Phần sau trình bày cú pháp tạo trigger DDL:
CREATE TRIGGER trigger_name
ON { DATABASE | ALL SERVER}
[WITH ddl_trigger_option]
FOR {event_type | event_group }
AS {sql_statement}
trigger_name
Chỉ định tên trình kích hoạt do người dùng định nghĩa sau từ khóa CREATE TRIGGER
. Lưu ý rằng bạn không phải chỉ định lược đồ (schema) cho một trigger DDL vì nó không liên quan đến table hoặc view cơ sở dữ liệu thực tế.
DATABASE | ALL SERVER
Sử dụng DATABASE
nếu trình kích hoạt phản hồi các sự kiện trong phạm vi cơ sở dữ liệu hoặc ALL SERVER
nếu trình kích hoạt phản hồi các sự kiện trong phạm vi máy chủ.
ddl_trigger_option
Các tùy chọn ddl_trigger_option
chỉ rõ mệnh đề ENCRYPTION
và / hoặc EXECUTE AS
. ENCRYPTION
mã hóa định nghĩa của trigger. EXECUTE AS
xác định bối cảnh bảo mật mà theo đó trigger được thực thi.
event_type | event_group
Các event_type
chỉ ra một sự kiện DDL kích hoạt trigger như CREATE_TABLE
, ALTER_TABLE
, vv.
event_group
là một nhóm các sự kiện event_type
chẳng hạn như DDL_TABLE_EVENTS
.
Trigger có thể đăng ký một hoặc nhiều sự kiện hoặc nhóm sự kiện.
Giả sử bạn muốn nắm bắt tất cả các sửa đổi được thực hiện đối với chỉ mục cơ sở dữ liệu để bạn có thể theo dõi tốt hơn hiệu suất của máy chủ cơ sở dữ liệu liên quan đến những thay đổi chỉ mục này.
Đầu tiên, tạo một bảng mới có tên index_logs
để ghi các thay đổi chỉ mục:
CREATE TABLE index_logs (
log_id INT IDENTITY PRIMARY KEY,
event_data XML NOT NULL,
changed_by SYSNAME NOT NULL
);
GO
Tiếp theo, tạo một trigger DDL để theo dõi các thay đổi chỉ mục và chèn dữ liệu sự kiện vào bảng index_logs
:
CREATE TRIGGER trg_index_changes
ON DATABASE
FOR
CREATE_INDEX,
ALTER_INDEX,
DROP_INDEX
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO index_logs (
event_data,
changed_by
)
VALUES (
EVENTDATA(),
USER
);
END;
GO
Trong phần thân của trigger, chúng tôi đã sử dụng hàm EVENTDATA()
trả về thông tin về các sự kiện máy chủ hoặc cơ sở dữ liệu. Hàm này chỉ khả dụng bên trong DDL hoặc trình kích hoạt đăng nhập.
Sau đó, tạo chỉ mục cho cột first_name
và last_name
của bảng sales.customers
:
CREATE NONCLUSTERED INDEX nidx_fname
ON sales.customers(first_name);
GO
CREATE NONCLUSTERED INDEX nidx_lname
ON sales.customers(last_name);
GO
Sau đó, truy vấn dữ liệu từ bảng index_changes
để kiểm tra xem sự kiện tạo chỉ mục có được trình kích hoạt ghi lại đúng cách hay không:
SELECT
*
FROM
index_logs;
Đây là đầu ra:
Nếu bạn nhấp vào ô của cột event_data
, bạn có thể xem dữ liệu XML của sự kiện như sau:
Trong phần này, bạn đã tìm hiểu cách tạo trigger DDL trong SQL Server phản hồi một hoặc nhiều sự kiện DDL.
Trong phần này, bạn sẽ tìm hiểu cách sử dụng câu lệnh DISABLE TRIGGER
trong SQL Server để tắt trigger.
Đôi khi, vì mục đích khắc phục sự cố hoặc khôi phục dữ liệu, bạn có thể muốn tắt tạm thời trigger. Để làm điều này, bạn sử dụng câu lệnh DISABLE TRIGGER
:
DISABLE TRIGGER [schema_name.][trigger_name]
ON [object_name | DATABASE | ALL SERVER]
Trong cú pháp này:
DISABLE TRIGGER
.DATABASE
nếu trigger có phạm vi cơ sở dữ liệu DDL hoặc SERVER
nếu trigger có phạm vi máy chủ DDL.Câu lệnh sau tạo một bảng mới có tên sales.members
để minh họa:
CREATE TABLE sales.members (
member_id INT IDENTITY PRIMARY KEY,
customer_id INT NOT NULL,
member_level CHAR(10) NOT NULL
);
Câu lệnh sau tạo một trigger được kích hoạt bất cứ khi nào một hàng mới được chèn vào bảng sales.members
. Với mục đích minh họa, trigger chỉ trả về một thông báo đơn giản.
CREATE TRIGGER sales.trg_members_insert
ON sales.members
AFTER INSERT
AS
BEGIN
PRINT 'A new member has been inserted';
END;
Câu lệnh sau sẽ chèn một hàng mới vào bảng sales.members
:
INSERT INTO sales.members(customer_id, member_level)
VALUES(1,'Silver');
Do sự kiện INSERT
này, trigger đã được kích hoạt và in ra thông báo sau:
A new member has been inserted
Để tắt trigger sales.trg_members_insert
, bạn sử dụng câu lệnh DISABLE TRIGGER
như sau:
DISABLE TRIGGER sales.trg_members_insert
ON sales.members;
Bây giờ nếu bạn chèn một hàng mới vào bảng sales.members
, trigger sẽ không được kích hoạt.
INSERT INTO sales.members(customer_id, member_level)
VALUES(2,'Gold');
Nó có nghĩa là trình kích hoạt đã bị vô hiệu hóa.
Lưu ý rằng trigger vẫn còn trên bảng. Nếu bạn xem trigger trong SQL Server Management Studio (SSMS), bạn sẽ nhận thấy biểu tượng chữ thập đỏ trên tên trigger bị vô hiệu hóa:
Để tắt tất cả các trigger của bảng, bạn sử dụng câu lệnh sau:
DISABLE TRIGGER ALL ON table_name;
Trong câu lệnh này, bạn chỉ cần chỉ định tên của bảng để vô hiệu hóa tất cả các trigger thuộc về bảng đó.
Câu lệnh sau tạo một trigger mới trên bảng sales.members
được kích hoạt sau sự kiện xóa:
CREATE TRIGGER sales.trg_members_delete
ON sales.members
AFTER DELETE
AS
BEGIN
PRINT 'A new member has been deleted';
END;
Để tắt tất cả các trigger trên bảng sales.members
, bạn sử dụng câu lệnh sau:
DISABLE TRIGGER ALL ON sales.members;
Hình ảnh sau đây cho thấy trạng thái của tất cả các trigger thuộc bảng sales.members
:
Để tắt tất cả các trigger của cơ sở dữ liệu hiện tại, bạn sử dụng câu lệnh sau:
DISABLE TRIGGER ALL ON DATABASE;
Trong phần này, bạn sẽ tìm hiểu cách sử dụng câu lệnh ENABLE TRIGGER
trong SQL Server để bật trigger.
Câu lệnh ENABLE TRIGGER
cho phép bạn bật trigger để nó có thể được kích hoạt bất cứ khi nào một sự kiện xảy ra.
Sau đây minh họa cú pháp của câu lệnh ENABLE TRIGGER
:
ENABLE TRIGGER [schema_name.][trigger_name]
ON [object_name | DATABASE | ALL SERVER]
Trong cú pháp này:
DATABASE
nếu trigger là trigger có phạm vi cơ sở dữ liệu DDL hoặc ALL SERVER
nếu trigger là trigger có phạm vi máy chủ DDL.Chúng tôi sẽ sử dụng bảng sales.members
được tạo trong phần DISABLE TRIGGER
để minh họa.
Để bật trigger sales.sales.trg_members_insert
, bạn sử dụng câu lệnh sau:
ENABLE TRIGGER sales.trg_members_insert
ON sales.members;
Sau khi được bật, bạn có thể thấy trạng thái của trigger thông qua SQL Server Management Studio như được hiển thị trong hình sau:
Để bật tất cả các trigger của một bảng, bạn sử dụng câu lệnh sau:
ENABLE TRIGGER ALL ON table_name;
Trong cú pháp này, bạn chỉ cần chỉ định tên của bảng mà bạn muốn bật tất cả các trigger được liên kết.
Ví dụ: để bật tất cả các trigger của bảng sales.members
, bạn sử dụng câu lệnh sau:
ENABLE TRIGGER ALL ON sales.members;
Hình ảnh sau đây cho thấy trạng thái của tất cả các trigger của bảng sales.members
:
Để bật tất cả trigger của cơ sở dữ liệu hiện tại, bạn sử dụng câu lệnh sau:
ENABLE TRIGGER ALL ON DATABASE;
Trong phần này, bạn sẽ tìm hiểu 4 cách xem code của trigger trong SQL Server.
Bạn có thể xem code của trigger bằng cách truy vấn dữ liệu dựa trên view sys.sql_modules
:
SELECT
definition
FROM
sys.sql_modules
WHERE
object_id = OBJECT_ID('sales.trg_members_delete');
Đây là đầu ra:
Trong truy vấn này, bạn truyền tên của trigger mà bạn muốn xem code cho hàm OBJECT_ID()
trong mệnh đề WHERE
.
Bạn có thể xem code của trigger bằng cách sử dụng hàm OBJECT_DEFINITION
như sau:
SELECT
OBJECT_DEFINITION (
OBJECT_ID(
'sales.trg_members_delete'
)
) AS trigger_definition;
Trong truy vấn này, bạn truyền tên trigger cho hàm OBJECT_ID để lấy ID của trigger. Sau đó, bạn sử dụng hàm OBJECT_DEFINITION()
để lấy code của trigger dựa trên ID của nó.
Cách đơn giản nhất để lấy code của trigger là sử dụng stored procedure sp_helptext như sau:
EXEC sp_helptext 'sales.trg_members_delete' ;
Stored procedure sp_helptext
trả về code được sử dụng để tạo ra một đối tượng, trong trường hợp này là trigger.
Để xem code của trigger DML:
Để liệt kê tất cả trigger trong SQL Server, bạn truy vấn dữ liệu từ view sys.triggers
như sau:
SELECT
name,
is_instead_of_trigger
FROM
sys.triggers
WHERE
type = 'TR';
Hình ảnh sau đây cho thấy đầu ra:
Trong phần này, bạn sẽ tìm hiểu cách sử dụng câu lệnh DROP TRIGGER
trong SQL Server để xóa các trigger hiện có.
Câu lệnh DROP TRIGGER
trong SQL Server xóa một hoặc nhiều trigger khỏi cơ sở dữ liệu. Phần sau minh họa cú pháp của câu lệnh DROP TRIGGER
để xóa trigger DML:
DROP TRIGGER [ IF EXISTS ] [schema_name.]trigger_name [ ,...n ];
Trong cú pháp này:
IF EXISTS
chỉ xóa trigger khi nó đã tồn tại.schema_name
là tên của lược đồ chứa trigger DML.trigger_name
là tên của trigger mà bạn muốn xóa.Nếu bạn muốn xóa nhiều trigger cùng một lúc, bạn cần phân tách các trigger bằng dấu phẩy.
Để xóa một hoặc nhiều trigger DDL, bạn sử dụng cú pháp sau của câu lệnh DROP TRIGGER
:
DROP TRIGGER [ IF EXISTS ] trigger_name [ ,...n ]
ON { DATABASE | ALL SERVER };
Trong cú pháp này:
DATABASE
chỉ ra rằng phạm vi của trigger DDL áp dụng cho cơ sở dữ liệu hiện tại.ALL SERVER
cho biết phạm vi của trigger DDL áp dụng cho server hiện tại.Để xóa trigger sự kiện LOGON
, bạn sử dụng cú pháp sau:
DROP TRIGGER [ IF EXISTS ] trigger_name [ ,...n ]
ON ALL SERVER;
Lưu ý rằng khi bạn xóa một bảng, tất cả trigger được liên kết với bảng cũng tự động bị xóa.
Câu lệnh sau sẽ xóa một trigger DML có tên sales.trg_member_insert
:
DROP TRIGGER IF EXISTS sales.trg_member_insert;
Câu lệnh sau sẽ xóa trigger DDL có tên trg_index_changes
:
DROP TRIGGER IF EXISTS trg_index_changes;
Trong hướng dẫn này, bạn đã tìm hiểu về:
CREATE TRIGGER
trong SQL Server để tạo một trigger mới.INSTEAD OF
trong SQL Server để chèn dữ liệu vào bảng thông qua view.DISABLE TRIGGER
để tắt trigger trong SQL Server.ENABLE TRIGGER
để bật trigger trong SQL Server.DROP TRIGGER
để xóa trigger trong SQL Server.Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong hướng dẫn này, bạn sẽ tìm hiểu về GUID trong SQL Server và cách sử dụng hàm NEWID() để tạo giá trị GUID.
Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATETIMEOFFSET trong SQL Server để thao tác datetime với múi giờ.
Trong hướng dẫn này, bạn sẽ học cách lưu trữ thời gian trong ngày trong cơ sở dữ liệu bằng cách sử dụng kiểu dữ liệu TIME trong SQL Server.
Trong hướng dẫn này, bạn sẽ học cách sử dụng kiểu dữ liệu DATE trong SQL Server để lưu trữ dữ liệu ngày tháng trong một bảng.