Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Trigger Insert. Пытаюсь вставить добавленную строку в другую таблицу.  [new]
AnMoOr
Member

Откуда: Moscow
Сообщений: 77
Здравствуйте!
Имеем:
INSERT INTO [dev_DataWarehouse].[dbo].[LogUsersActivity_Tr]
           ([timestamp]
           ,[ReportDate]
           ,[DataBaseSource]
           ,[Counterpart]
           ,[ResponsiblePerson]
           ,[DirtyCount]
           ,[DescrData]
           ,[UsedApp]
           ,[ObjectApp]
           ,[UserIDApp]
           ,[StartUsedObjectApp]
           ,[FinishUsedObjectApp]
           ,[_IDRRef]
           ,[_Version]
           ,[_Marked]
           ,[_Date_Time]
           ,[_NumberPrefix]
           ,[_Number]
           ,[_Posted]
           ,[_IDRRefUserRef]
           ,[_CodeUserRef]
           ,[_DescriptionUserRef]
           ,[Name8User]
           ,[OSName8User])
     VALUES
           (@Date1,@Date2,@DataBaseSource,@Counterpart,@ResponsiblePerson,-1,@DescrData,'1C',@ObjectApp,@UserIDApp,@Date3,@Date4,
			(SELECT      inserted._IDRRef,
						 inserted._Version, 
						 inserted._Marked,
						 inserted._Date_Time,
						 inserted._NumberPrefix,
						 inserted._Number,
						 inserted._Posted, 
						 inserted._Fld4128RRef as '_IDRRefUserRef',
						 _Table1._Code as '_CodeUserRef', 
						 _Table1._Description as '_DescriptionUserRef',
						 Table2.Name as 'Name8User', 
						 Table2.OSName as 'OSName8User'
			FROM inserted INNER JOIN
                         _Table1 ON inserted._Fld4128RRef = _Table1._IDRRef INNER JOIN
                         Table2 ON _Table1._Fld10246 = Table2.ID))


Если результаты Select'а в VALUES засунуть просто в таблицу = всегда 1 строка, все работает, все хорошо.
Если заменить INSERT на SELECT INTO - таблица создается, всешда одна строка, все хорошо.
Если же выполнить INSERT -
22 июл 16, 15:42    [19442241]     Ответить | Цитировать Сообщить модератору
 Re: Trigger Insert. Пытаюсь вставить добавленную строку в другую таблицу.  [new]
AnMoOr
Member

Откуда: Moscow
Сообщений: 77
Msg 116, Level 16, State 1, Procedure ExternalLogKPI, Line 71
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
Msg 109, Level 15, State 1, Procedure ExternalLogKPI, Line 30
There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.


ЧЯДНТ?
22 июл 16, 15:44    [19442267]     Ответить | Цитировать Сообщить модератору
 Re: Trigger Insert. Пытаюсь вставить добавленную строку в другую таблицу.  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
AnMoOr,
Дак наверное пора заглянуть в доку и узнать для себя что триггер работает с наборами, а не с одной строкой.
22 июл 16, 15:45    [19442285]     Ответить | Цитировать Сообщить модератору
 Re: Trigger Insert. Пытаюсь вставить добавленную строку в другую таблицу.  [new]
AnMoOr
Member

Откуда: Moscow
Сообщений: 77
Ясней не стало. Ссылка на часть доки и подробности,применимые к этой ситуации, не помешают...
22 июл 16, 15:52    [19442341]     Ответить | Цитировать Сообщить модератору
 Re: Trigger Insert. Пытаюсь вставить добавленную строку в другую таблицу.  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
AnMoOr,

если коротко то в inserted у вас нифига не одна запись, а вставить пытаетесь как один
22 июл 16, 15:56    [19442398]     Ответить | Цитировать Сообщить модератору
 Re: Trigger Insert. Пытаюсь вставить добавленную строку в другую таблицу.  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
INSERT INTO [dev_DataWarehouse].[dbo].[LogUsersActivity_Tr]
           ([timestamp]
           ,[ReportDate]
           ,[DataBaseSource]
           ,[Counterpart]
           ,[ResponsiblePerson]
           ,[DirtyCount]
           ,[DescrData]
           ,[UsedApp]
           ,[ObjectApp]
           ,[UserIDApp]
           ,[StartUsedObjectApp]
           ,[FinishUsedObjectApp]
           ,[_IDRRef]
           ,[_Version]
           ,[_Marked]
           ,[_Date_Time]
           ,[_NumberPrefix]
           ,[_Number]
           ,[_Posted]
           ,[_IDRRefUserRef]
           ,[_CodeUserRef]
           ,[_DescriptionUserRef]
           ,[Name8User]
           ,[OSName8User])
SELECT
           @Date1,@Date2,@DataBaseSource,@Counterpart,@ResponsiblePerson,-1,@DescrData,'1C',@ObjectApp,@UserIDApp,@Date3,@Date4,
			inserted._IDRRef,
						 inserted._Version, 
						 inserted._Marked,
						 inserted._Date_Time,
						 inserted._NumberPrefix,
						 inserted._Number,
						 inserted._Posted, 
						 inserted._Fld4128RRef as '_IDRRefUserRef',
						 _Table1._Code as '_CodeUserRef', 
						 _Table1._Description as '_DescriptionUserRef',
						 Table2.Name as 'Name8User', 
						 Table2.OSName as 'OSName8User'
			FROM inserted INNER JOIN
                         _Table1 ON inserted._Fld4128RRef = _Table1._IDRRef INNER JOIN
                         Table2 ON _Table1._Fld10246 = Table2.ID
22 июл 16, 15:58    [19442418]     Ответить | Цитировать Сообщить модератору
 Re: Trigger Insert. Пытаюсь вставить добавленную строку в другую таблицу.  [new]
AnMoOr
Member

Откуда: Moscow
Сообщений: 77
А, я понял:
Select из inserted, в моем случае, не говорит о том что там будет обязательно 1 строка. Это мне просто так везет.
Я так понимаю, что если в одной транзакции выполнить 3 инсерта, там будет 3 строки? Или когда там будет 1+ строки?
.
Konst_One, спасибо большое, все работает.
22 июл 16, 16:26    [19442715]     Ответить | Цитировать Сообщить модератору
 Re: Trigger Insert. Пытаюсь вставить добавленную строку в другую таблицу.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
AnMoOr
Я так понимаю, что если в одной транзакции выполнить 3 инсерта, там будет 3 строки?
Одним INSERTом легко и непринуждённо можно вставить миллион строк.
На каждый INSERT один раз вызывается триггер.
22 июл 16, 19:39    [19443641]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить