2016-10-11 63 views
0

我正在使用SQL Server 2012,並且我有一個存儲過程。我收到上述錯誤的最後一部分是這部分:SQL存儲過程將數據類型varchar轉換爲bigint時出錯

Set @SQL = ' 
Select Style=case when AttNr = 2 then '''' else Entity end'[email protected]+' 
From #Temp 
Where Entity not in (Select Entity From #Temp Where AttNr=2 Group By Entity Having Sum(cast(Value as bigint))=0) 
Group By Entity,AttNr 
Order By Entity,AttNr 
' 

我在哪裏出錯了?

更新爲:

Set @SQL = ' 
Select Style=case when AttNr = 2 then '''' else Entity end'[email protected]+' 
From #Temp 
Where Entity not in (Select cast(Entity as varchar(100)) From #Temp Where AttNr=2 Group By Entity Having Sum(cast(Value as bigint))=0) 
Group By Entity,AttNr 
Order By Entity,AttNr 
' 

我必須做一些愚蠢的事 - 改爲:

Set @SQL = ' 
Select Style=case when AttNr = ''2'' then '''' else Entity end'[email protected]+' 
From #Temp 
Where Entity not in (Select cast(Entity as varchar(100)) From #Temp Where AttNr=2 Group By Entity Having Sum(cast(Value as bigint))=0) 
Group By Entity,AttNr 
Order By Entity,AttNr 
' 

好吧,我換到了下面:

Set @SQL = ' 
Select Style=case when AttNr = ''2'' then '''' else cast(Entity as varchar(100)) end'[email protected]+' 
From #Temp 
Where Entity not in (Select cast(Entity as varchar(100)) From #Temp Where AttNr=''2'' Group By Entity Having Sum(cast(Value as bigint))=0) 
Group By Entity,AttNr 
Order By Entity,AttNr 
' 

但仍然是一個沒有去 - 同樣的錯誤。

感謝,

邁克爾

+0

你有沒有不會轉換的數據(即不是數字)? – JohnHC

+0

將數字數據存儲在varchar列中時。 – jarlh

+0

將其他實體部分轉換爲varchar – TheGameiswar

回答

-1

也許你的數據爲空,也不能強制轉換爲BIGINT .... 只需更換在查詢這段代碼...

SUM((CAST(ISNULL(Value , '0') as bigint))) 

做它應該施放任何空值...

+0

Your'e歡迎.. –

1

cast(Entity as varchar(100)) 

你所得到的錯誤,因爲案例如下數據類型優先。所以值然後和其他人將轉換爲具有相同的數據類型更高的優先級

以下示例:

Declare @a int=1 
select case when @A=1 then '''' else cast(@a as varchar(10)) end 

錯誤:
將varchar值'''轉換爲數據類型int時轉換失敗。

也可以,那AttNr具有一定的VARCHAR值,所以儘量鑄造含蓄爲varchar,如果是這樣的話..

AttNr ='2'

相關問題