0

很新的TSQL選擇數據...TSQL使用記錄目前正在插入另一臺

我呼籲下表「tblinit」:

Account_Num UserID  Task_Percent 
----------- ------------ ------------ 
1    john.smith 0.75 

我想更新「下面的「tblRaw」中的「任務百分比」值。

Account_Num UserID  Task_Percent 
----------- ------------ ------------ 
1    john.smith 0.5 
2    mary.mickle 0.9 
3    don.donalds 1 

我的計劃是使用由觸發器執行的TSQL存儲過程插入到「tblinit」中。存儲過程會將數據移動到「tblRaw」(合併或刪除並插入),然後在完成過程時截斷「tblinit」。 tblInit僅用於分段傳入數據。

I have read aboutSCOPE_IDENTITY and @@IDENTIY但是沒有完全理解這個概念。執行存儲過程的觸發器是否定義了範圍?在嘗試使用SCOPE_IDENTITY@@IDENTITY我自己的SELECT語句時,我總是返回一個「NULL」結果。引用的MSDN文章似乎返回與文章示例中指定的數據無關的主鍵。很顯然,我正在閱讀錯誤的東西。我想抓取剛剛插入的記錄並將其用於查詢。

從本質上說,我怎麼上插入自動更新和John.Smith新的百分比值,或者,如何添加一個新的記錄完全?

回答

2

我怎麼上插入自動更新和John.Smith新的百分比值

該觸發器可以用來做正是:

create trigger tblinit_to_tblRaw 
on tblinit 
for insert 
as 
begin 
    update r 
    set r.Task_Percent = i.Task_Percent 
    from inserted i 
     join tblRaw r on i.UserID = r.UserID -- Join on Account_Num instead? 
end 

這並沒有考慮到新記錄(在tblRaw中不存在匹配)。爲此,您可能需要運行if exists(...merge

1

鑑於您提到的各種概念,我必須承認您的意圖有點混亂。

如果你想在該更新程序觸發閃光後從原始表中刪除/刪除,那麼你就錯了。

如果你只是想運行總保持在另一臺性能方面的原因,然後檢查了「索引視圖」。

如果你想要的東西添加到一個表,然後更新另一個從原來的刪除,那麼你要麼尋找一個隊列或只是一個存儲過程來對相應的表進行更新。你不需要用觸發器和東西來做複雜的步驟。

不知道IDENTITY的東西來自哪裏。很確定你不需要這裏。

我認爲你讓它比它需要更復雜。

我可能是錯的 - 隨時可以詳細說明。

+0

我想你可能是對的!我正在使用SharePoint中的Web服務的INSERT語句...也許我應該調查MERGE語句而不是INSERT並轉儲中間表? – Shrout1

相關問題