2011-10-28 93 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