-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 + ')
')

を除くパラメータは、 (for )@SegmentNameなどの文字列です。@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 列または何かが必要になります。

あなたがやりたいことは完全に可能ですが、提供したスキーマ設計ではそうではありません。これが保持したい情報である場合は、別のテーブルを作成して実行時に入力するだけです。入力変数を格納するテーブルに ID 列を配置し、そのテーブルへの挿入に @@IDENTITY を使用して、メイン テーブルに executionID 列を設定し、変数の集計テーブルをクロス結合された結果テーブルに簡単に関連付けることができます。 .

于 2013-01-23T22:09:46.653 に答える