私は他の2つのマスターテーブルに基づいて入力したいSQLマスターテーブルを持っていCHANNEL_PT
ます.CHANNEL
PT
3 つの列のCHANNEL_PT
cosist CHANNEL_PT_CD
、CHANNEL_CD
およびPT_CD
.
レコードを挿入するシナリオは、テーブルにCHANNEL_PT
2 つのエントリがある場合、CHANNEL
PT
以下の表の2 つのエントリ、
次に、CHANNEL_PT
テーブルは次のようになります
これができることは知っていましたCURSOR
が、パフォーマンス上の懸念から使用していません。
期待される結果を得るために以下のようにクエリを作成しましたが、他のより効率的な方法または最適化されたクエリを知りたいです。
BEGIN TRANSACTION
DECLARE @CH INT;
DECLARE @CH_CNT INT;
DECLARE @CH_MAX INT;
SELECT @CH_MAX = MAX(CHANNEL_CD) FROM CHANNEL;
SELECT @CH = ISNULL(MIN(CHANNEL_CD),0),@CH_CNT=COUNT(CHANNEL_CD) FROM CHANNEL WHERE CHANNEL_CD > -1
WHILE @CH <= @CH_MAX
BEGIN
DECLARE @PT INT;
DECLARE @PT_CNT INT;
DECLARE @PT_MAX INT;
SELECT @PT_MAX = MAX(PT_CD) FROM PT;
SELECT @PT = ISNULL(MIN(PT_CD),0),@PT_CNT=COUNT(PT_CD) FROM PT WHERE PT_CD > -1
WHILE @PT <=@PT_MAX
BEGIN
DECLARE @CPT INT;
SELECT @CPT = ISNULL(MAX(CHANNEL_PT_CD),0) FROM CHANNEL_PT
IF NOT EXISTS(SELECT CHANNEL_CD,PT_CD FROM CHANNEL_PT WHERE CHANNEL_CD=@CH and PT_CD=@PT)
BEGIN
INSERT INTO CHANNEL_PT VALUES(@CPT+1,@CH,@PT)
END
SELECT @PT = MIN(PT_CD) FROM PT WHERE PT_CD > @PT
END
SELECT @CH=MIN(CHANNEL_CD) FROM CHANNEL WHERE CHANNEL_CD > @CH
END
COMMIT;