2017-01-02 142 views
0

に私は次のエラーを取得する:データ型varcharをbigintに変換中にエラーが発生しました。更新

Error converting data type varchar to bigint.

次のクエリ実行中:MaxSizeMBとして

declare @MaxSizeMB BIGINT 
set @MaxSizeMB = 50 

DECLARE @Query varchar(8000)='' 

set @Query = 'UPDATE SPMC 
       SET SPMC.HasBlockedSize = 1, SPMC.HasIssues = 1 
       FROM PWI 
       INNER JOIN SI ON SI.Id = PWI.SourceItemId 
       INNER JOIN SPMC ON SPMC.SourceItemId = SI.Id 
           AND SI.ItemSize > ' + CAST(@MaxSizeMB AS bigint) + ' * 1024 * 1024 ' 

print (@Query) 
+1

なぜ実際のクエリで変数を使用する代わりにクエリ文字列を作成していますか? –

答えて

0

BIGINTに変換すでにBIGINTでは効果がありません、あなたは、計算を変換するべき値はvarchar(max)になります。

declare @MaxSizeMB BIGINT 
set @MaxSizeMB = 50 

DECLARE @Query varchar(8000)='' 

set @Query=    
'Update SPMC 
Set SPMC.HasBlockedSize = 1, SPMC.HasIssues = 1 
FROM PWI 
INNER JOIN SI on SI.Id = PWI.SourceItemId 
INNER JOIN SPMC on SPMC.SourceItemId = SI.Id 
AND SI.ItemSize > '+ cast(@MaxSizeMB * 1024 * 1024 as varchar(max)) 

print (@Query) 
0

これを試してください:あなたは動的なクエリを生成するよう

declare @MaxSizeMB BIGINT 
set @MaxSizeMB = 50 
DECLARE @Query varchar(8000)='' 

set @Query=    
'Update SPMC 
Set SPMC.HasBlockedSize = 1, SPMC.HasIssues = 1 
FROM PWI 
INNER JOIN SI on SI.Id = PWI.SourceItemId 
INNER JOIN SPMC on SPMC.SourceItemId = SI.Id 
AND SI.ItemSize > '+ cast(cast(@MaxSizeMB as bigint) as varchar(max)) +' * 1024 * 1024 ' 

print (@Query) 
0

はVARCHARに@MaxSizeMBをキャスト:

declare @MaxSizeMB BIGINT 
set @MaxSizeMB = 50 

DECLARE @Query VARCHAR(8000)='' 

set @Query=    
'Update SPMC 
Set SPMC.HasBlockedSize = 1, SPMC.HasIssues = 1 
FROM PWI 
INNER JOIN SI on SI.Id = PWI.SourceItemId 
INNER JOIN SPMC on SPMC.SourceItemId = SI.Id 
AND SI.ItemSize > '+ cast(@MaxSizeMB as varchar) +' * 1024 * 1024 ' 

print (@Query) 
1

を使用すると、クエリのうち、@MaxSizeMB x 1024 x 1024を計算し、だけではないんWHT結果を次のようにクエリに連結します。

declare @MaxSizeMB BIGINT 
set @MaxSizeMB = 50*1024*1024 

DECLARE @Query varchar(8000)='' 

set @Query=    
'Update SPMC 
Set SPMC.HasBlockedSize = 1, SPMC.HasIssues = 1 
FROM PWI 
INNER JOIN SI on SI.Id = PWI.SourceItemId 
INNER JOIN SPMC on SPMC.SourceItemId = SI.Id 
AND SI.ItemSize > '+ cast(@MaxSizeMB as varchar(max)) 

print (@Query) 

また、動的SQLを使用せずに同じ結果を得ることもできます。

Update SPMC 
Set SPMC.HasBlockedSize = 1, SPMC.HasIssues = 1 
FROM PWI 
INNER JOIN SI on SI.Id = PWI.SourceItemId 
INNER JOIN SPMC on SPMC.SourceItemId = SI.Id 
AND SI.ItemSize > (@MaxSizeMB *1024*1024) 
関連する問題