Sql server 2012 如何使用动态列名更新表?

Sql server 2012 如何使用动态列名更新表?,sql-server-2012,Sql Server 2012,下面的更新语句按预期工作。但是,我需要将语句循环50次以上。我正在尝试编写一个循环,允许我将设置的字段从Seg1更改为SegX,并将子字符串(GoalBusinessSegment,(6*1)-5,5)更新为“Seg”,将子字符串(GoalBusinessSegment,(6*X)-5,5)更新为“Seg” 下面是我对循环的尝试 DECLARE @LoopCount int DECLARE @SegField varchar(255) DECLARE @i int DELETE FROM [d

下面的更新语句按预期工作。但是,我需要将语句循环50次以上。我正在尝试编写一个循环,允许我将设置的字段从Seg1更改为SegX,并将子字符串(GoalBusinessSegment,(6*1)-5,5)更新为“Seg”,将子字符串(GoalBusinessSegment,(6*X)-5,5)更新为“Seg”

下面是我对循环的尝试

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
DECLARE@LoopCount int
声明@SegField varchar(255)
声明@i int
从[dbo].[MULTBUSSEGTEST]中删除
插入[dbo]。[MULTBUSSEGTEST]
选择不同的GoalBusinessSegment作为“SegID”
,NULL为“Seg1”
,NULL为'Seg2'
,NULL为“Tgt1”
,NULL为'Tgt2'
,NULL为'Act1'
,NULL为'Act2'
自[2017].[dbo].[WPGDM]
其中GoalID介于22.1和22.4之间,左侧(GoalBusiness Segment,1)=“B”和LEN(GoalBusiness Segment)>5
设置@LoopCount=(选择楼层(最大(LEN(GoalBusinessSegment))/5)
自[2017].[dbo].[WPGDM]
)
而@i 5
)SegTBL
其中[dbo].[MULTBUSSEGTEST].SegID=SegTBL.GoalBusinessSegment
设置@i=@i+1
结束

循环生成所有空值,我缺少什么?

意识到不需要多个字段和update语句。问题解决了

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