0
以下の更新ステートメントは、意図したとおりに動作します。しかし、私は文を50回以上ループする必要があります。 Seg1からSegXに設定されているフィールドを変更し、SubString(GoalBusinessSegment、(6 * 1)-5,5)AS 'Seg'をSubString(GoalBusinessSegment)に更新するループを作成しようとしています。 、(6 * X)-5,5)AS 'Seg'テーブルを動的列名で更新するには?
UPDATE [dbo].[MULTBUSSEGTEST]
SET Seg1 = SegTBL.Seg
FROM (SELECT DISTINCT GoalBusinessSegment,SubString(GoalBusinessSegment,(6*1)-5,5) AS 'Seg'
FROM [2017].[dbo].[WPGDM]
WHERE GoalID BETWEEN 22.1 AND 22.4 AND
LEFT(GoalBusinessSegment,1) = 'B' AND LEN(GoalBusinessSegment) > 5
) SegTBL
WHERE [dbo].[MULTBUSSEGTEST].SegID = SegTBL.GoalBusinessSegment
以下はループでの私の試みです。
DECLARE @LoopCount int
DECLARE @SegField varchar(255)
DECLARE @i int
DELETE FROM [dbo].[MULTBUSSEGTEST]
INSERT INTO [dbo].[MULTBUSSEGTEST]
SELECT DISTINCT GoalBusinessSegment AS 'SegID'
,NULL AS 'Seg1'
,NULL AS 'Seg2'
,NULL AS 'Tgt1'
,NULL AS 'Tgt2'
,NULL AS 'Act1'
,NULL AS 'Act2'
FROM [2017].[dbo].[WPGDM]
WHERE GoalID BETWEEN 22.1 AND 22.4 AND LEFT(GoalBusinessSegment,1) = 'B' AND LEN(GoalBusinessSegment) > 5
Set @LoopCount = (SELECT FLOOR(MAX(LEN(GoalBusinessSegment))/5)
FROM [2017].[dbo].[WPGDM]
)
WHILE @i <= @LoopCount
BEGIN
Set @SegField = 'Seg' + @LoopCount
UPDATE [dbo].[MULTBUSSEGTEST]
SET @SegField = SegTBL.Seg
FROM (SELECT DISTINCT GoalBusinessSegment
,SubString(GoalBusinessSegment,(6*@i)-5,5) AS 'Seg'
FROM [2017].[dbo].[WPGDM]
WHERE GoalID BETWEEN 22.1 AND 22.4 AND LEFT(GoalBusinessSegment,1) = 'B' AND LEN(GoalBusinessSegment) > 5
) SegTBL
WHERE [dbo].[MULTBUSSEGTEST].SegID = SegTBL.GoalBusinessSegment
SET @i = @i + 1
END
ループはすべてnull値を生成しますが、何が欠けていますか?