2016-02-09 5 views
1

Я хочу вставить запись после вставки с помощью триггера, но она не работает должным образом. он находится на бухгалтерском столе. Сначала я написал триггер, и я получил эту ошибку: Оператор INSERT противоречил ограничению FOREIGN KEY. Конфликт произошел в базе данных. Оператор был прерван. Тогда я нашел ключ и написал триггер на эту таблицу, а затем я получил новую ошибку: это SqlTransaction завершен, она больше не является полезным для SQL Server и здесь является триггер:Вставить в другую таблицу с триггером

USE [Sepidar01] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

Alter TRIGGER [INV].[CrmSelectInsertVWInvoiceItems] 
ON [INV].[InventoryDeliveryItem] 
After Insert 
AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @CustomerCode varchar(40) 
DECLARE @InvoiceRef INT 
DECLARE @Price decimal(19, 4) 
DECLARE @CreationDate datetime 
DECLARE @Quantity decimal(19, 4) 
DECLARE @GuID uniqueidentifier 
DECLARE @KalaCode int 
DECLARE @BaseInvoiceItem int 

SELECT @BaseInvoiceItem=(BaseInvoiceItem) FROM INSERTED 

select @CreationDate AS [inv.CreationDate],@CustomerCode AS [dl.Code],@Price  
AS [invitem.Price],@Quantity AS [invitem.Quantity], @KalaCode AS [itemst.ItemStockID] 
from [Sepidar01].[INV].[InventoryDeliveryItem] as invent 
join sls.InvoiceItem as invitem 
on BaseInvoiceItem =InvoiceItemID 
join sls.Invoice as inv 
on InvoiceId = InvoiceRef 
join acc.dl as dl 
on inv.CustomerRealName like dl.Title 
join inv.ItemStock as itemst 
on invitem.ItemRef = itemst.ItemRef 
where invent.BaseInvoiceItem = @BaseInvoiceItem 

SELECT @GuID AS [bartar_newpaitientId] 
    FROM [192.168.0.15].[Bartar_MSCRM].[dbo].[bartar_newpaitientBase] as newPatient 
    where newPatient.bartar_CustomerCode = @CustomerCode 

INSERT INTO [192.168.0.15].[Test_MSCRM].[dbo].[bartar_callcenterreportBase] 
     ([bartar_callcenterreportId] 
     ,[OwnerId] 
     ,[statecode] 
     ,[CreatedOn] 
     ,[bartar_Date] 
     ,[bartar_patientName] 
     ,[bartar_Brand] 
     ,[bartar_Paste] 
     ,[bartar_Bag] 
     ,[bartar_ACC] 
     ,[bartar_NextDateSales] 
     ,[bartar_name]) 
VALUES 
     (NEWID(),'315BE87D-0035-E511-80B5-0007E9498006',0,@CreationDate,@CreationDate,@GuID,0,0,0,0,@CreationDate,'System') 

END 

Так как я могу решите эту проблему?

+0

Tag DBMS использовал, чтобы получить больше внимания! (Этот код совсем не похож на ANSI SQL.) – jarlh

+0

И я использовал его на виду вместо вставки, Не выдавал никаких ошибок и не вставлял никаких данных. – Morteza

+0

Ваш триггер не работает. Он принимает ровно одну строку в 'insert'. На самом деле, может быть 0, 1 или * несколько * строк. Предпочитаете написать один оператор 'INSERT ... SELECT', который напрямую ссылается на' вставленный'. –

ответ

1

Вы должны изменить ваш первый выбор, как это:

select @CreationDate=[inv.CreationDate],@CustomerCode=[dl.Code], 
@Price=[invitem.Price], 
@Quantity=[invitem.Quantity], @KalaCode=[itemst.ItemStockID] 
from [Sepidar01].[INV].[InventoryDeliveryItem] as invent 
join sls.InvoiceItem as invitem 
on BaseInvoiceItem =InvoiceItemID 
join sls.Invoice as inv 
on InvoiceId = InvoiceRef 
join acc.dl as dl 
on inv.CustomerRealName like dl.Title 
join inv.ItemStock as itemst 
on invitem.ItemRef = itemst.ItemRef 
where invent.BaseInvoiceItem = @BaseInvoiceItem 

И второе:

SELECT @GuID=[bartar_newpaitientId] 
    FROM [192.168.0.15].[Bartar_MSCRM].[dbo].[bartar_newpaitientBase] 
    as newPatient 
    where newPatient.bartar_CustomerCode = @CustomerCode 

Так что ваши вары получить значение.

И если вы получите эту ошибку Msdtc on server is unavailable, это решение: fix error

Смежные вопросы