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.
我沒有被授權改變列的數據類型。
有沒有其他方法可以做到這一點。
感謝
「不幸的是我的Varchar意識到保存電話號碼不良好的做法「 - 誰告訴你的?也很確定一個電話號碼永遠不會超過24位! –
@MitchWheat:是的你說得對。我的第二項任務是使用SSIS清除所有不良數據 –
是否沒有辦法做到這一點。請建議 –