2011-10-28 94 views
2

我有7個不同的存儲過程,它們接收大量參數並將數據插入到7個不同的表中。SQL Server設置多個變量

我現在正在創建一個主存儲過程來執行這7個過程,並提供他們需要的所有數據。他們需要的所有數據都是一張表(CommonImport)。

我應該採取所有我需要在這個主要的存儲過程中的參數?

或者

只有採取在需要被插入到這些7代單獨的表的行的ID和直接從表中獲取數據。

我認爲第二種選擇是最好的。但是,如何將主存儲過程中的所有變量設置爲(CommonImport)表中的所有數據?

本質上,我如何設置一堆聲明的變量到CommonImport表中特定行的值?

由於

回答

2

傳遞一個ID:

這裏的好處是可以簡化存儲過程的所有接口。

這使得編碼更容易。如果您最終從多個地方調用SP,則只需使用單個參數,而不是加載並傳遞多個參數。


傳遞n變量:

當年這裏的好處就是你 '脫鉤' 從保持表的存儲過程。

這意味着您可以直接調用存儲過程,而不需要表中有任何數據。這可能是在未來有用,如果數據到達一個新的方式,或進行單元測試等


哪一個是最好:

我不認爲有對此的直接回答,更多的是偏好和意見。

我的意見是,緊密耦合的東西越好越好。面對變化,它更加靈活。

我會這樣做的方式如下...

CREATE PROCEDURE main_by_variable @v1 INT, @v2 INT, ... 
BEGIN 
    EXEC sub_part_1 @v1, @v3 
    EXEC sub_part_2 @v2 
    EXEC sub_part_3 @v2, @v3 
    ... 
END 

CREATE PROCEDURE main_by_id @id INT AS 
BEGIN 
    DECLARE 
    @v1 INT, 
    @v2 INT, 
    ... 
    SELECT 
    @v1 = field1, 
    @v2 = field2 
    FROM 
    holding_table 
    WHERE 
    id = @id 

    EXEC main_by_variable @v1, @v2, ... 
END 
GO; 

通過具有main_by_variable過程中,你有felxibility試驗等所有的子過程,而實際上不必輸入任何數據到保持臺。而且這種靈活性也是子程序的一部分。

但是,爲了方便起見,您可能會發現使用main_by_id更整齊。由於這只是main_by_variable的一個包裝,所以你只需要在流程中封裝一個步驟(從表中獲取數據)。

它還允許您在數據收集部分周圍進行事務處理,並將數據從表格中刪除。或許多其他選項。它很靈活,我喜歡靈活。

2

我建議接受所有變量作爲參數,並定義默認值它們,所以SP用戶既可以與單個ID參數或與其他作爲WEEL通過指定那些直接

CREATE PROCEDURE MainSP 
    @ID int, 
    @CustomParameter varchar(10) = NULL, 
    @CustomParameter1 DateTime = NULL, 
    ... 
使用它

這樣SP將是非常靈活

+0

CommonImport表只是一個保存表。進入SP的唯一變量值是CommonImport表中的值。 – ediblecode

+0

順便說一句,爲什麼你需要7個獨立的程序來處理單個表?他們在做什麼? – sll

+0

我從CSV文件中導入數據,每一行都會被檢查並驗證,然後放入CommonImport表中。 這個數據然後被導入到我們的現場系統中,特別是七個不同的表格,即財產,存款,房東,房客等 因此有七個程序從CommonImport表中取得相關信息,然後插入相關表在現場。 此外,決定你的方法是最好的參數,因爲這個SP可能在CommonImport不是數據源的其他項目中使用。所以謝謝 – ediblecode