所以我想,我通过了一堆的问题,工作我会重新写这整个事情的更新列。这是我最新的代码:遍历表行的循环
DECLARE @LoopC INT = 1, @MaxOID INT,
@OID nVARCHAR(32), @Col nVARCHAR(6), @Colv nVARCHAR(3)
SET @MaxOID = (select count(*) from #kentmp)
SET @Col = 'col2'
SET @Colv = '2'
WHILE(@LoopC <= @MaxOID)
BEGIN
SET @OID = (Select OID
FROM #kentmp where ID = @LoopC)
DECLARE @sql NVARCHAR(MAX) = 'update #kenintotmp set ' + @Col +' = ' + '''' + @OID + ''''
Print @OID
--Print @Colv
Print @Col
Print @sql
EXEC sp_executesql @sql
SET @Colv = (select SUBSTRING(@Col, PATINDEX('%[0-9]%', @Col), LEN(@col)))
SET @Colv = @Colv + 2
SET @Col = 'col' + @Colv
SET @LoopC = @LoopC + 1
END
目前我的问题是它不更新任何记录的表。我的回报是这样的:
0DE6A44203544775A164F81C264AF68B
col2
update #kenintotmp set col2 = '0DE6A44203544775A164F81C264AF68B'
(0 row(s) affected)
13FCE4FF16A44B149E116427AD47B5CE
col4
update #kenintotmp set col4 = '13FCE4FF16A44B149E116427AD47B5CE'
(0 row(s) affected)
1F81D9D6DAB04992A99CA0DC61894D7B
col6
update #kenintotmp set col6 = '1F81D9D6DAB04992A99CA0DC61894D7B'
即使当我尝试只是在桌子上的这之外,我得到一个受影响的0行运行一个简单的更新。这是从我制作的临时表中发现的问题:
CREATE TABLE #kenintotmp
(
col1 varchar(255),
col2 varchar(255),
col3 varchar(255),
col4 varchar(255),
col5 varchar(255),
col6 varchar(255),
col7 varchar(255),
col8 varchar(255),
col9 varchar(255),
col10 varchar(255),
col11 varchar(255),
col12 varchar(255),
col13 varchar(255),
col14 varchar(255),
col15 varchar(255),
col16 varchar(255),
col17 varchar(255),
col18 varchar(255),
col19 varchar(255),
col20 varchar(255),
col21 varchar(255),
col22 varchar(255),
)
任何想法为什么这不工作/更新?
告诉我们你做了什么,什么是你期望的输出 – Ravi
我使用光标的OID循环,但我的想法是有列名作为一个变量(如果有问题可能会发生变化,同时循环速度),但即时通讯不确定如何做到这一点。我的想法是从一个int开始,并转换为varchar用于where列名称是更新的一部分,但正如我所说我有点失落。 – KRM