Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
906
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
SQL сервер 2005 триггер Insert не вводить достаточное количество записей
У меня есть таблица в базе данных SQL Server 2005 с триггером, который должен добавлять запись в другую таблицу всякий раз, когда вставляется новая запись. Это, кажется, работает нормально, но если я выполняю Insert Into в главной таблице, которая использует подзапрос в качестве источника значений, триггер вставляет только одну запись в другую таблицу, даже если в главную было добавлено несколько записей. Я хочу, чтобы триггер срабатывал для каждой новой записи, добавленной в главную таблицу. Возможно ли это в 2005 году?
Вставка, которую я делаю, это:
INSERT INTO [tblMenuItems] ([ID], [MenuID], [SortOrder], [ItemReference], [MenuReference], [ConcurrencyID]) SELECT [ID], [MenuID], [SortOrder], [ItemReference], [MenuReference], [ConcurrencyID] FROM [IVEEtblMenuItems]
Вот как выглядит триггер:
CREATE TRIGGER [dbo].[tblMenuItemInsertSecurity] ON [dbo].[tblMenuItems]
FOR INSERT
AS
Declare @iRoleID int
Declare @iMenuItemID int
Select @iMenuItemID = [ID] from Inserted
DECLARE tblUserRoles CURSOR FASTFORWARD FOR SELECT [ID] from tblUserRoles
OPEN tblUserRoles
FETCH NEXT FROM tblUserRoles INTO @iRoleID
WHILE (@@FetchStatus = 0)
BEGIN
INSERT INTO tblRestrictedMenuItems(
[RoleID],
[MenuItemID],
[RestrictLevel])
VALUES(
@iRoleID,
@iMenuItemID,
1)
FETCH NEXT FROM tblUserRoles INTO @iRoleID
END
CLOSE tblUserRoles
Deallocate tblUserRoles
Ваш триггер использует только первую строку из 'Inserted'. Это распространенное недоразумение, когда мы впервые имеем дело с триггерами SQL. Триггер срабатывает на обновление, а не на строку.
Например, если вы выполните следующие действия:-
обновление продуктов название набора = 'geoff de geoff'
это приведет к обновлению всех продуктов, но триггер в таблице продуктов сработает только один раз.
Вставленный 'table', который вы получаете в триггере, будет содержать все строки. Вы должны либо выполнить цикл через вставленный курсором, либо лучше присоединиться к вставленной таблице, которую вы обновляете.
Пожалуйста, посмотрите многорядное рассмотрение триггеров что происходит с курсором внутри триггера? Узнайте, как программировать набор на основе, курсоры являются злом в T-SQL и должны использоваться только для дефрагментации / обновления статистики/другого обслуживания куча таблиц
Триггер срабатывает только один раз для каждого выполненного состояния INSERT - не один раз для каждой вставленной записи.
В своем триггере вы можете получить доступ к таблице 'virtual' с именем inserted для получения подробной информации о вставленных записях.
т.е.:
SELECT COUNT(*) FROM inserted
Возвращает количество вставленных записей.
Я просто хочу, чтобы второй звонок @Gordon был на его ответе...
"Catch" значения в тот самый момент, когда они вставляются. Вам действительно не нужен курсор в этой ситуации (или, может быть, у вас есть причина?).
Простой TRIGGER может быть все, что вам нужно:
http://dbalink.wordpress.com/2008/06/20/how-to-sql-server-trigger-101 /