Являются ли триггеры записи на сервере MS SQL такими же, как их запись в MS Access? - PullRequest
0 голосов
/ 17 июня 2009

Я написал следующий триггер на сервере SQL:

create trigger test_trigger
on invoice -- This is the invoice table
for insert
as
declare @invoiceAmount int    -- This is the amount specified in the invoice 
declare @custNumber int       -- This is the customer's id

--use the 'inserted' keyword to access the values inserted into the invoice table
select @invoiceAmount = Inv_Amt from inserted 
select @custNumber = cust_num from inserted


update customer
set amount = @invoiceAmount
where Id = @custNumber

Это сможет работать в MS Access или синтаксис другой?

Ответы [ 5 ]

3 голосов
/ 17 июня 2009

Ядро базы данных Access (ранее называвшееся Jet) не имеет триггеров и, тем не менее, не имеет синтаксиса управления потоком, например, ПРОЦЕДУРА должна состоять ровно из одного оператора SQL.

Скажите нам, что вы действительно хотите сделать, и может быть альтернативный синтаксис.

Например, вы можете создать новый ключ, используя ограничение UNIQUE на счет-фактуру (cust_num, Inv_Amt), клиент FOREIGN KEY (id, сумма) для ссылки на новый ключ, VIEW, который объединяет две таблицы в FOREIGN КЛЮЧЕВЫЕ столбцы и выставляя все четыре столбца, затем ВСТАВЛЯЙТЕ в ПРОСМОТР, а не в таблицу «Счет-фактура»; Возможно, вы захотите использовать привилегии, чтобы запретить INSERT для базовой таблицы, но безопасность на уровне пользователя была удалена из нового механизма Access 2007 (называемого ACE).

Но, если вы не возражаете, я скажу, что ваш триггер не отражает сценарий реальной жизни. Столбец с неопределенным названием «сумма» в таблице «клиент» для хранения самой последней суммы счета? Как насчет того, когда вставленная логическая таблица содержит строки для более чем одного клиента? Как я уже сказал, я думаю, вам нужно рассказать нам, чего вы на самом деле пытаетесь достичь.

2 голосов
/ 17 июня 2009

Доступ не имеет триггеров

Ваш триггер, который вы показываете здесь, сработает, так как он не учитывает многострочные обновления в тот момент, когда кто-то обновляет более одной строки (и не говорите, что этого не произойдет, потому что лучше потренироваться в некотором защитном кодировании)

Триггеры запускаются для каждой партии, а не для строки, пожалуйста, прочитайте Рекомендации по многострочным вычислениям для триггеров DML

вместо этого добавьте вставленную псевдо-таблицу и таблицу счетов-фактур, чтобы обновить значения ..., которые работают для 1 и более 1 строки

1 голос
/ 05 ноября 2009
0 голосов
/ 17 июня 2009

Я никогда не сталкивался с триггерами в Access, если только он не работает с ADP на SQL Server. Итак, ваш ответ - да, то же самое, если вы используете SQL Server для бэкэнда, и нет, если таблица хранится в Access.

0 голосов
/ 17 июня 2009

MS Access не имеет триггеров.

То есть механизм Access Jet (который создает файлы .mdb). Если Access подключается к серверу базы данных, он будет использовать все триггеры в этой базе данных.

...