當前位置:商標查詢大全網 - 商標轉讓 - 在SQL Server中,如何插入多基表的視圖(包括兩個帶標記列的表,子表外鍵為NULL)?

在SQL Server中,如何插入多基表的視圖(包括兩個帶標記列的表,子表外鍵為NULL)?

第四個答案:

SET NOCOUNT ON意味著該語句或存儲過程不返回值。如果存儲過程(觸發器)包含壹些不返回多少實際數據的語句,那麽網絡通信流量就會大大減少。將set nocount設置為ON可以顯著提高性能。

妳這裏就有了,沒必要再加這個了。

我給出的SQL代碼是insert。請參考insert的觸發器自行解決更新問題。相信妳真的能學會~(其實很簡單,也不難理解主次外鍵和自加列的原理)。

如果您還有疑問,請點擊“線上說”或“線下留言”,給我發消息。如果我有時間,我可以和妳討論這個問題。

————————————————————————————————

第三個答案:

那妳能描述壹下妳的問題嗎?另外,2010-01-02 10:20之後妳有沒有關註我的回答?

————————————————————————————————

第二個答案:

以下回答修改於2010-01-02 10:20。前面的觸發器寫在兩個地方。

————————————————————————————————

第壹次回答:

樓上的回答沒有考慮到更新情況。

另外,妳在問題中提到ON NULL,是指:ON DELETE/UPDATE SET NULL嗎?

那樣的話,子表中商品ID(int,not null)的外鍵如果不能為空就是錯的,應該為空。所以我不明白妳說的on null是什麽意思。請說清楚。

以下觸發器用於簡單地處理標識列:

創建觸發器Trig_ _商品和規格插入視圖_商品和規格

代替插入

如同

開始

聲明@商品ID int

如果(不存在(從A1商品表A中選擇1,插入I,其中A .商品ID = i .商品ID))

開始

插入A1商品清單(商品分類ID、商標、外調、內調、商品名稱代碼、商品名稱代碼)

選擇商品分類ID、商標、外部調整、內部調整、產品名稱代碼、產品名稱代碼。

從插入

選擇@商品ID = @ @身份

結束

其他

開始

Select @商品ID =商品ID from inserted

更新A1商品清單

設置商品分類ID = i .商品分類ID/*其他遺漏,請補充*/

從A1商品表a,插入I。

其中a .商品ID = i .商品ID

結束

如果(不存在(從a3商品規格表_軸承b中選擇1,插入I。

其中b .商品規格表_軸承ID = i .商品規格表_軸承ID))

插入A3商品規格表(商品ID,內徑mm,外徑mm,厚度mm,重量kg)

選擇@商品ID,內徑mm,外徑mm,厚度mm,重量kg。

從插入

其他

更新A3商品規格表_軸承

設置商品ID = @商品ID,

內徑mm = i .內徑mm,

外徑mm = 1 .外徑mm,

厚度mm = 1 .厚度mm,

重量千克= 1 .重量千克

來自A3商品規格表_軸承b,插入I。

其中b .商品規格表_軸承ID = i .商品規格表_軸承ID

結束

以上基本可以使用,但是還有壹個問題,就是如果插入視圖的IDENTITY值不在表中,也就是需要插入基表,大多數情況下,基表中自動增加的IDENTITY主鍵值不會等於插入視圖的IDENTITY值。此時,如果您將相同的數據插入到視圖中,相應的數據將被插入到基表中,這可能不是您想要的。

如果要排除這種情況,需要確保插入到視圖中的標識值是正則的或者唯壹的,也就是說,它起著主鍵值的作用。這時,您需要構建另壹個表來存儲插入到視圖中的標識值和實際在基表中的主鍵值。插入視圖時,如果發現該表中已經存在該標識值,請將該標識值更改為相應基表的主鍵值以進行更新。

當然,妳要區分這個標識值存在於基表中時如何處理,以及它也存在於這個表中用於存儲插入到視圖中的標識值時如何處理,這取決於妳的實際需要。