2015-05-01 52 views
-1

不同的數據更新同一張表我有一個像下面插入並與SQL

AccNum ProdId Name Work 
1  P1  DJ  sample 
2  P2  SJ  W1 
2  C2  SJ  W1 

如果我們有AccNum是1,我需要插入下面紀錄PRODID C1(在同一行的「P1與表1 「C1」 產品)

1 C1 DJ sample 

那麼結果將是

AccNum  ProdId Name Work 
    1  P1  DJ  sample 
    2  P2  SJ  W1 
    1  C1  DJ  sample 
    2  C2  SJ  W1 

案例2:

如果我們有像數據低於

AccNum  ProdId Name Work 
    1  P1  DJ  sample 
    2  P2  SJ  W1 
    1  C1  DJ  
    2  C2  SJ  W1 

我需要更新工作「樣本」 C1,並導致像下面

AccNum ProdId Name Work 
    1  P1  DJ  sample 
    2  P2  SJ  W1 
    1  C1  DJ  sample 
    2  C2  SJ  W1 

如果table1中有100行的,我需要檢查每一個P1行,我需要插入或更新C1數據。

我需要處理這兩種情況下,任何一個請建議的解決方案

回答

1

您將需要尋找到SQL觸發器。

https://msdn.microsoft.com/en-GB/library/ms189799.aspx

CREATE TRIGGER triggerName ON table 
AFTER INSERT 
AS 
IF EXISTS (SELECT * FROM Table 
     WHERE AccNum= (SELECT AccNum FROM Inserted) 
    ) 
BEGIN 
    UPDATE Table SET Table.Work = inserted.work 
    FROM inserted where table.AccNum = inserted.AccNum 
GO 

我沒有測試代碼,但它會是這樣的。

或者這

CREATE TABLE #Table1 (AccNum int, ProdId varchar(10), Name varchar(10), Work varchar(10)) 

INSERT INTO #Table1 (AccNum, ProdId, Name, Work) VALUES (1,'P1','DJ','Sample') 
INSERT INTO #Table1 (AccNum, ProdId, Name, Work) VALUES (2,'P2','SJ','W1') 
INSERT INTO #Table1 (AccNum, ProdId, Name, Work) VALUES (1,'C1','DJ','Sample') 
INSERT INTO #Table1 (AccNum, ProdId, Name, Work) VALUES (2,'C2','SJ','W1') 

GO 
CREATE PROCEDURE usp_sproc 
(@ProdId varchar(10), @Work varchar(10)) 
as 
BEGIN 
DECLARE @cRec varchar(10) = STUFF(@ProdId,1,1,'C') 

UPDATE #Table1 SET Work = @Work WHERE ProdId = @ProdId 

IF EXISTS (SELECT * FROM #Table1 WHERE ProdId = @cRec) 
    UPDATE #Table1 SET Work = @Work WHERE ProdId = @cRec 
ELSE 
    INSERT INTO #Table1(AccNum, ProdId, Name, Work) SELECT AccNum, @cRec, Name,@Work FROM #Table1 WHERE ProdId [email protected] 
END 
GO 

SELECT * FROM #Table1 

EXEC usp_sproc 'P1','TESTw' 

DROP PROCEDURE usp_sproc 
+0

感謝@ClassyBear,我上無法使用觸發器,我需要實現這個爲StoredProcedure – Venkat

+0

甚至更​​好。與代碼相同的邏輯,但您不必與插入的表連接。首先運行你的插入來更新帶有記錄的表,然後用你需要更新的參數運行上面的'if'語句。 – ClassyBear

+0

如果table1有100行,我需要檢查每個P1行,我需要插入或更新C1數據。 – Venkat