表格由以下存储过程填充:
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
除外)是字符串,例如(@CarTypes
)'hatchback','suv','sedan'
。
表中的数据是否可用于为单个SegmentName
创建存储过程的先前条目的列表
Run1:@ CarTypes,@ EngineTypes,@ AxleTypes
Run2:@ CarTypes,@ EngineTypes,@ AxleTypes
Run3:@ CarTypes,@ EngineTypes,@ AxleTypes
...
运行不需要按顺序排列。该过程可能涉及T-SQL和C#的组合。我很确定这是不可能的;也许有人可以证明我错了。
答案 0 :(得分:1)
不,这是不可能的,因为您正在接受可能以逗号分隔的值字符串,这些值将在结果表中创建单独的行。您可以轻松地为CarTypes,EngineTypes和AxleTypes变量分别获取单个值,但是每次执行动态SQL时需要单独对它们进行分组,您需要某种executionID列或者每次执行时对行进行分组。
所以你是正确的,因为你想要做的事情是完全可能的,但不是你提供的架构设计。我想创建另一个表并在运行时填充它,如果这是您想要保留的信息。您可以在包含输入变量的表上放置一个标识列,并使用@@ IDENTITY插入该表以填充主表中的executionID列,以便您可以轻松地将变量摘要表与交叉连接结果表关联