2017-02-15 112 views
0

我必須更新所有缺失的帳戶的交易號。更新SQL表時出錯 - varchar值的轉換溢出了int列

更新商標號規則是: -

時郵政編碼爲兩個或兩個以上賬戶匹配,那麼檢查所有的電話號碼是否相同或地址匹配外卡。如果任何crieteria匹配比貿易號碼更新。

DDL: -

DECLARE @MASTER TABLE 
(
[Account Number] VARCHAR (15),  
[Trade Number] VARCHAR (25), 
[ADDRESS 1] VARCHAR (35), 
[BRNAME] VARCHAR (35), 
[POSTCODE] VARCHAR (25), 
[Phone Number 1] VARCHAR (8000),  
[Phone Number 2] VARCHAR (8000),  
[NEW Phone Number 1]VARCHAR (8000), 
[NEW Phone Number 2]VARCHAR (8000) 
) 

INSERT @MASTER 

SELECT 'a0001205','',   'UNIT 39', 'SOUTH', 'RM15 4YG',  '07967967404',  '222222222','9988779988',''  UNION ALL 
SELECT 'a0001205','',   'UNIT 39', 'SOUTH', 'RM15 4YG',  '222222222',  '','',''  UNION ALL   
SELECT 'a1005338','',   'Unit 3', 'SOUTH', 'RM15 4YG',  '07967967404', '','',''   UNION ALL 
SELECT 'a1005338','',   'Unit 3', 'SOUTH', 'RM15 4YG',  '01708865140', '','',''   UNION ALL 
SELECT 'C5108924','119734','UNIT 39',  'BASILDON', 'RM15 4YG',  '07967967404', '','',''      UNION ALL 
SELECT 'C5108924','119734','UNIT 39',  'BASILDON', 'RM15 4YG',  '01708865140', '','',''    UNION ALL 
SELECT 'C5108965','',   'UNIT 39', 'BASILDON', 'RM15 4YG',  '865140'  , '','',''    UNION ALL 
SELECT 'C5108965','',   'UNIT 39', 'BASILDON', 'RM15 4YG',  '865140'  ,  '','',''    UNION ALL 
SELECT 'I0010050','',   'UNIT 39', 'WEST',  'RM15 4YG',  '01708865140',  '01708865140','','55555555'   UNION ALL 
SELECT 'I0010050','',   'UNIT 39', 'WEST',  'RM15 4YG',  '', '01708865140','',''   UNION ALL 
SELECT 'I7000438','',   'Unit 3', 'EAST',  'RM15 4YG',  '',  '01708865140','',''     UNION ALL 
SELECT 'I7000438','',   'Unit 3', 'EAST',  'RM15 4YG',  '55555555',  '01708865140','','' 

Code: 

;with cte as (
    select o.*, x.FoundTradeNumber 
    from @MASTER as o 
    cross apply (
     select top 1 FoundTradeNumber = i.[Trade Number] 
     from @MASTER as i 
     where REPLACE(i.[POSTCODE], ' ', '')=REPLACE(o.[POSTCODE], ' ', '') 
      and nullif(i.[Trade Number],'') is not null 
      and (
       nullif(i.[Phone Number 1],0) in (o.[Phone Number 1], o.[Phone Number 2],o.[NEW Phone Number 1], o.[NEW Phone Number 2]) 
      or nullif(i.[Phone Number 2],0) in (o.[Phone Number 1], o.[Phone Number 2],o.[NEW Phone Number 1], o.[NEW Phone Number 2]) 
      or nullif(i.[NEW Phone Number 1],0) in (o.[Phone Number 1], o.[Phone Number 2],o.[NEW Phone Number 1], o.[NEW Phone Number 2]) 
      or nullif(i.[NEW Phone Number 2],0) in (o.[Phone Number 1], o.[Phone Number 2],o.[NEW Phone Number 1], o.[NEW Phone Number 2]) 
      or i.[ADDRESS 1] LIKE o.[ADDRESS 1]+'%'   
       ) 
     ) as x 
    where nullif(o.[Trade Number],'') is null 
     and (o.[Phone Number 1] > 0 or o.[Phone Number 2] > 0 OR o.[NEW Phone Number 1] >0 OR o.[NEW Phone Number 2]>0) 
) 
--select * from cte 
update cte set [Trade Number] = FoundTradeNumber 

錯誤: -

Msg 248, Level 16, State 1, Line 32 
The conversion of the varchar value '07967967404' overflowed an int column. 

我沒有被授權改變列的數據類型。

有沒有其他方法可以做到這一點。

感謝

+3

「不幸的是我的Varchar意識到保存電話號碼不良好的做法「 - 誰告訴你的?也很確定一個電話號碼永遠不會超過24位! –

+0

@MitchWheat:是的你說得對。我的第二項任務是使用SSIS清除所有不良數據 –

+0

是否沒有辦法做到這一點。請建議 –

回答

1

這應該工作,你只需要0單引號( '0')內

nullif(i.[Phone Number 1],'0') 
o.[Phone Number 1] > '0' 

結果: enter image description here

相關問題