在我的ASP.NET web應用程序我有一個DataTable
填充數據插入到tblChildren。
DataTable傳遞給stored procedure
。
在SP我需要讀取的每行(E.I 環路通過數據表),(在tblParents與根據相關數據)改變幾個列在它和僅然後將行插入tblChildren。我不認爲TVP
會做(不知道...不太熟悉它)。
當然,我可以遍歷應用程序中的DataTable行並將每個行分別發送給SP,但這意味着數百次往返於SqlServer。多次插入
我遇到了兩種可能,可能實現:(1)臨時表 (2)遊標。
第一是相當混亂,第二,據我所知,不建議)
任何指導將不勝感激。
做是因爲我填充在TT_Child_Family_Id列值的表型(TT_Children)。
在現實生活中,雖然,我不知道這些價值觀和我需要環通@my_TT_Children併爲每一行得到tblFamilies的價值,這樣的事情:
SELECT Family_Id FROM tblFamilies WHERE Family_Name = TT_Child_Last_Name
(假設總是相當於tblFamilies.Family_Name中的TT_Child_Last_Name)
所以我的問題是 - 如何遍歷表類型併爲每一行查找不同表中的值?
EDIT 2(解決方案):
作爲阿米爾的完美答卷,存儲過程應該是這樣的:
ALTER PROCEDURE [dbo].[usp_Z_Insert_Children]
@my_TT_Children TT_Children READONLY
AS
BEGIN
INSERT INTO tblChildren(Child_FirstName,
Child_LastName,
Child_Family_ID)
SELECT Cld.tt_child_FirstName,
Cld.tt_child_LastNAme,
Fml.Family_Id FROM @my_TT_Children Cld
INNER JOIN tblFamilies fml
ON Cld.TT_Child_LastName = Fml.Family_Name
END
由阿米爾注:在tblFamily列FAMILY_NAME必須是唯一的,最好索引。我也注意到,如果TT_Child_LastName在tblFamilies中沒有匹配,那麼這行不會被插入,我永遠不會知道它,這意味着如果所有行都被成功處理,我必須檢查它。
爲什麼不能使用第一個用來填充DataTable的存儲過程? –
我從Excel工作表填充DataTable。 – gadi
[如何將數據表插入到SQL Server數據庫表中?](http://stackoverflow.com/questions/9075159/how-to-insert-a-data-table-into-sql-server-database -table) –