Датабаз дээр trigger бичих нь: MsSQL ба MySQL

MySQL, MSSQL датабазын хүснэгт дээр trigger бичих нь.

MSSQL / T-SQL

Insert Trigger

CREATE TRIGGER trigger_insert1
ON table1
FOR INSERT
AS
BEGIN
UPDATE table2
    SET field_total = field_total + inserted.field_name1
END

Update Trigger

CREATE TRIGGER trigger_update1
ON table1
INSTEAD OF UPDATE
AS
BEGIN
SELECT t1.*, i.* FROM table1 t1
    JOIN inserted i ON t1.field_id = i.field_id
END

Delete Trigger

CREATE TRIGGER trigger_delete1
ON table1
FOR DELETE
AS
BEGIN
INSERT INTO logTableName
    SELECT * FROM deleted
END

Trigger Event

deleted – DELETE trigger үед дата нь deleted гэсэн хүснэгт хэлбэрээр байна.
inserted – INSERT, UPDATE trigger үед дата нь inserted гэсэн хүснэгт хэлбэрээр байна.

Trigger Time

FOR DELETE – Устгахаас өмнө
FOR INSERT – Нэмэхээс өмнө
FOR UPDATE – Засахаас өмнө
FOR INSERT, UPDATE – Нэмж, Засахаас өмнө

AFTER DELETE – Устгасаны дараа
AFTER INSERT – Нэмсэний дараа
AFTER UPDATE – Зассаны дараа
AFTER INSERT, UPDATE – Нэмж, Зассаны дараа

INSTEAD OF DELETE – Устгахын оронд
INSTEAD OF INSERT – Нэмэхийн оронд
INSTEAD OF UPDATE – Засахын оронд
INSTEAD OF INSERT, UPDATE – Нэмж, Засахын оронд

MySQL

Insert Trigger

CREATE TRIGGER trigger_insert1
BEFORE INSERT
ON table1
FOR EACH ROW
BEGIN
UPDATE table2
    SET field_total = field_total + NEW.field_name1
END;

Update Trigger

CREATE TRIGGER trigger_update1
AFTER UPDATE
ON table1
FOR EACH ROW
BEGIN
UPDATE table2
    SET field_total = field_total + NEW.field_name1
END

Delete Trigger

CREATE TRIGGER trigger_delete1
AFTER DELETE
ON table1
FOR EACH ROW
BEGIN
	INSERT INTO log_table_1 (id, field1, field2, field_date)
		values( old.id, old.field1, old.field2, NOW() );
END;

Trigger Event

OLD – DELETE trigger үед дата нь OLD гэсэн хүснэгт хэлбэрээр байна.
NEW – INSERT, UPDATE trigger үед дата нь NEW гэсэн хүснэгт хэлбэрээр байна.

Trigger Time
BEFORE DELETE – Устгахаас өмнө
BEFORE INSERT – Нэмэхээс өмнө
BEFORE UPDATE – Засахаас өмнө

AFTER DELETE – Устгасаны дараа
AFTER INSERT – Нэмсэний дараа
AFTER UPDATE – Зассаны дараа

Дурын мөр SELECT хийх

MYSQL:

SELECT багана_нэр FROM хүснэгт_нэр ORDER BY RAND() LIMIT 10

Oracle:

SELECT багана_нэр FROM ( SELECT column FROM хүснэгт_нэр ORDER BY dbms_random.value ) WHERE rownum <= 10

PostgreSQL:

SELECT багана_нэр FROM хүснэгт_нэр ORDER BY RANDOM() LIMIT 10

MSSQL:

SELECT TOP 10 багана_нэр FROM хүснэгт_нэр ORDER BY NEWID()

Oracle жаахан тиймэрхүү, тэрнээс mysql, postgresql энэ тэр амархан байгааз, тэр mssql-н NEWID() функц нь 36-н урттай unique стринг generate хийдийн, ер нь бол стринг ID болгон хэрэглэдэг л дээ.

Error on importing excel data into mssql

Windows-ийн регистерийн HKEY_LOCAL_MACHINE
\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel
-ээс TypeGuessRows талбар дахь утгыг сольсноор дээрхи алдааг засч болно. TypeGuessRows нь 0-оос 16 (decimal) хооронд утга авна.

Хэрэв 0 гэж өгвөл source-оос scan хийх мөрийн тоо 16384 болдог юм байна. 16384 хүртэлх мөр бүхий өгөгдөл байвал TypeGuessRows -ийг 0 болгоорой.

Status: It works.

%d bloggers like this: