-3

表由以下存储过程填充:

exec('
insert into tblSegments
    (SegmentName, CarTypeID, EngineTypeID, AxleTypeID)
select distinct
    ''' + @SegmentName + '''
    , CT.CarTypeID
    , ET.EngineTypeID
    , AT.AxleTypeID
from
    tblCarTypes CT
        cross join tblEngineTypes ET
        cross join tblAxleTypes AT
where
    CT.CarTypeName in (' + @CarTypes + ')
    and ET.EngineTypeName in (' + @EngineTypes + ')
    and AT.AxleTypeName in (' + @AxleTypes + ')
')

参数,除了@SegmentName,是字符串,如 (for @CarTypes) 'hatchback','suv','sedan'

表中的数据是否可用于为单个SegmentName存储过程的先前条目创建一个列表,类似于

Run1:@CarTypes、@EngineTypes、@AxleTypes
Run2:@CarTypes、@EngineTypes、@AxleTypes
Run3:@CarTypes、@EngineTypes、@AxleTypes

...?

运行不需要按顺序进行。该过程可能涉及 T-SQL 和 C# 的组合。我很确定这是不可能的;也许有人可以证明我错了。

4

1 回答 1

1

不,这是不可能的,因为您正在接受一个可能以逗号分隔的值字符串,这将在您的结果表中创建单独的行。您可以轻松地为 CarTypes、EngineTypes 和 AxleTypes 变量分别获取一个值,但是要按动态 SQL 的每次执行分别对它们进行分组,您需要某种 executionID 列或其他东西来对每次执行时的行进行分组。

所以你是正确的,你想要做的事情是完全可能的,但不是你提供的模式设计。如果这是您想要保留的信息,我将创建另一个表并在运行时填充它。您可以在包含输入变量的表上放置一个标识列,并使用 @@IDENTITY 插入该表以填充主表中的 executionID 列,以便您可以轻松地将变量汇总表与交叉连接的结果表相关联.

于 2013-01-23T22:09:46.653 回答