2015-11-30 95 views
-3

失敗時我希望看到whtat有個約會小於201511然而,我不斷收到錯誤表的輸出:轉換VARCHAR值 'MS SQL轉換轉換爲varchar

IF (201504 < 201511) 
     begin 
      (0 + 1) 
     end' to data type int. 

當轉換失敗
declare  @TableMonth int, 
      @CurrentMonth int = 0, 

@Table_Name = 'xx_'+CAST(@TableMonth as varchar)+'_T' , 
set @CurrentMonth = 'IF (' + cast(@TableMonth as varchar) + ' < 201511) 
begin 
      (' + cast(@CurrentMonth as varchar) + ' + 1) 
end'; 
+0

你正在做'SQL'像一些程序語言。很多不正確的代碼在這裏。更好地展示您的表的實際數據以及您想要選擇的內容。 –

+0

不能顯示數據,因爲它是保密的 –

+0

這是一個語法問題,我有 –

回答

1

嘗試指派一個varchar到整型變量,所以它不應該是令人驚訝的失敗 - 這是因爲,如果你想構建動態SQL但不執行。

幸運的是,解決辦法很簡單:

set @CurrentMonth = case when @TableMonth < 201511 then @CurrentMonth + 1 end 

我假定你每年處理翻車別處。

+0

所以我嘗試了第一次,但我得到一個語法錯誤附近的行結束,所以我做 –

+0

繼承人實際的線程:http://stackoverflow.com/questions/33936975/return-data-before-current-month/33938749?noredirect = 1#comment55641415_33938749 –

+0

@MissR什麼樣的語法錯誤?這對我來說可以。也許你需要在早期版本的MS SQL上使用'select @CurrentMonth = case ...',我不確定何時可以對任何表達式使用'set'。 – Luaan