2016-08-12 51 views
-1

在MSSQL中,我從來沒有真正與Triggers合作過,但我認爲這將是我完成這項任務所需要的。如果該值符合標準,則在INSERT後更改列值?

表的結構是這樣:

ID|****|****|****|****|****|****|****|TOUROPERATOR 

旅遊經營者的代碼是告訴我們公司所擁有,我們對他們進行了飛行的代碼。其中兩個代碼(共有24個)已經過時。我們的用戶要求更改這兩者,但旅行社代碼是從我們不控制的數據庫中提取的。但是FlightData表,我們控制。所以我在考慮一個觸發器如果它是兩個過時的代碼中的一個,可以將它改爲正確的代碼,而不是分別插入它們。

因此,我進入了良好的'SQL管理工作室,並要求做出觸發。它給了我一些示例代碼,這裏是我的僞代碼如下:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE TRIGGER ChangeProvider 
ON FlightData 
AFTER INSERT 
AS 
BEGIN 
    IF(TheInsertedValue == Criteria) 
     UPDATE FlightData 
     SET TheInsertedValue = NewValue 
    ENDIF 
END 
GO 

我不是這種類型的數據庫編程所以請原諒我的錯誤好。

我該怎麼做呢?

+0

的可能重複[我怎樣才能在一個觸發器編輯INSERT的值SQL Server?](http://stackoverflow.com/questions/3580123/how-can-i-edit-values-of-an-insert-in-a-trigger-on-sql-server) –

+0

爲什麼更新表插入後?爲什麼不在插入和插入正確的提供商代碼之前處理旅遊運營商代碼? –

+0

因爲代碼是從數據庫中提取的,所以我們無法控制。我們只能訪問該數據庫,我們無法操作它。 – OmniOwl

回答

1

你可以計算列到你的表中添加添加觸發器來代替。 然後新列可以使用case語句顯示 原始TourOperator列值或您想要的新值。

你會一個新列添加到您的表像這樣

TourOperatorCorrect = CASE WHEN TourOperator = 'Whatever value' THEN  'ChangedValue' 
         --I just want to use what I have already in the TourOperator column 
         ELSE TourOperator 
         END AS VARCHAR(50) 

計算列的基礎在這裏 - https://msdn.microsoft.com/en-ie/library/ms188300.aspx

+0

從我收集的內容中,我必須刪除列,填充數據,然後在它旁邊創建一個新列._。 – OmniOwl

+0

您可以保留TourOperator列,您將添加另一個虛擬列(它們可以被保存)到表中,該表中將包含您的「乾淨」值,無論是原始TourOperator值還是新值。 – TheGaff

+0

所以我會查詢計算列,而不是原來的或? – OmniOwl

0

您的誤解是,觸發器對每個插入的值運行一次 - 實際上每個插入語句運行一次,所以您可以並且會一次找到多於一行的插入行。

您會發現您的插入值位於僞表inserted中,該表與此例中的FlightData表具有相同的結構。你寫一個select語句,指定你想要的任何標準。

但是,目前尚不清楚您的邏輯是什麼 - 您觸發器中更新的FlightData表只有一行?你是否用最新的插入值更新表格中的每一行?很難理解你現在想要做什麼,以及表和這個觸發器的目的是什麼 - 更不用說如果你一次插入多行的話你想要做什麼。

+0

FlightData表中有成百上千行,但我們用戶在從該表中提取數據時要求用戶修改其中的兩個旅行代碼。然而,旅遊運營商代碼是從我們無法控制的外部數據庫中提取的。我們無法操縱它。所以我在想什麼是捕獲一個插入,並簡單地更改旅遊運營商代碼,以便它們在FlightData表中正確顯示。 – OmniOwl

0

當插入表中包含多發行,你的代碼會失敗,所以更改代碼插入表格的工作作爲一個整體

UPDATE F 
    SET f.TheInsertedValue = i.value 
    from inserted i 
    join 
    Flighttable F 
    on f.matchingcolumn=i.matchingcolumn 
    and i.somevalue='criteria' 
相關問題