2017-02-13 15 views
0

我需要創建T-SQL語句字符串以在while循環中更新表。如何創建用於更新表的T-SQL語句字符串

WHILE @currentDayCount <= @amountOfDays 
BEGIN 
    SELECT @totalErros = COUNT(*) 
    FROM ErrorLog 
    WHERE StatusCode = 417 
     AND Response LIKE '%' + @mensagemResponse + '%' 
     AND CAST(CreationDate AS DATE) = CAST(@dataPesquisa AS DATE) 

    SET @SQL = 'UPDATE #AnaliseDeErros417 SET ' + 
       CAST(FORMAT(CAST(@dataPesquisa AS DATE), 'dd/MM') AS VARCHAR(10)) + 
       ' = ' + CAST(@totalErros AS VARCHAR(8)) + ' WHERE Id = ' + CAST(@contadorMensagens AS VARCHAR(1)); 

    EXECUTE(@SQL) 

    SET @dataPesquisa = DateADD(DAY, 1, @dataPesquisa) 
    SET @currentDayCount = @currentDayCount + 1; 
END 

除更新SQL語句外,所有工作都正常。

+0

你真的有每個dd/MM的專欄嗎? >在''quotename()''''''''quotename(CAST(FORMAT(CAST(@dataPesquisa AS DATE),'dd/MM')AS VARCHAR(10)))'' – SqlZim

+1

看起來像你正試圖以艱難的方式建立一個數據透視表。那是你在做什麼? – SqlZim

回答

0

從查詢

' WHERE Id = ' + CAST(@contadorMensagens AS VARCHAR(1))

要更新的同一行多次。 @contadorMensagens也應該與@dataPesquisa@currentDayCount一起更新。因此,滿足條件Id = ' + CAST(@contadorMensagens AS VARCHAR(1))的行將僅在#AnaliseDeErros417中得到更新。此外,該行將僅包含來自while循環的最後一次迭代的值。如果AnaliseDeErros417中沒有這樣的行,則不會更新行。