所以我想,我通過了一堆的問題,工作我會重新寫這整個事情的更新列。這是我最新的代碼:遍歷錶行的循環
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