文章詳情頁
SQL Server導(dǎo)入excel數(shù)據(jù)之Bug!
瀏覽:140日期:2022-08-04 10:11:36
最近幫朋友把他整理的excel數(shù)據(jù)導(dǎo)入到Sql Server中,失敗,報(bào)錯(cuò)如下:作為源列4(“產(chǎn)品說明”)的數(shù)據(jù)對(duì)于所指定的緩沖區(qū)來講太大。 我的excel文件中有一列叫“產(chǎn)品說明”,就是一些文字。Sql server處理導(dǎo)excel數(shù)據(jù)流程是這樣的,它會(huì)先創(chuàng)建目標(biāo)表,再把excel數(shù)據(jù)寫入緩沖區(qū),然后再把緩沖區(qū)數(shù)據(jù)寫入目標(biāo)表。問題就在創(chuàng)建目標(biāo)表和寫入緩沖區(qū),sql server會(huì)根據(jù)現(xiàn)在的excel中的數(shù)據(jù)格式來寫入緩沖區(qū)和創(chuàng)建目標(biāo)表。比如excel中有一列為編號(hào),里面是數(shù)字,sqlserver就會(huì)在目標(biāo)表里建一列叫“編號(hào)”,為float類型. 而對(duì)于我的excel文件中的'產(chǎn)品說明'這一列,是文字,那sql server如何建立目標(biāo)列或緩沖區(qū)呢?它怎么知道該把目標(biāo)建立成varchar還是text呢?經(jīng)過測(cè)試,發(fā)現(xiàn)sql server是這樣做的,他會(huì)取excel文件中的前8行(2的三次方),然后算這8行里“產(chǎn)品說明”的最大長(zhǎng)度,如果這8行里最長(zhǎng)的 > 255,則目標(biāo)列和緩沖區(qū)就會(huì)建立成ntext類型,否則就建立成nvarchar類型。這樣,問題就來了!假設(shè)我的excel文件前8行“產(chǎn)品說明”中都 < 255,則目標(biāo)和緩沖區(qū)就被建立為varchar(255)類型了(這里說明一下,你可以修改目標(biāo)表的字段類型,但緩沖區(qū)長(zhǎng)度或類型是無法修改的)。而如果我的第10行里“產(chǎn)品說明”的長(zhǎng)度超過了255,則sql server往緩沖區(qū)里寫的時(shí)候,自然就發(fā)生了如上的錯(cuò)誤:數(shù)據(jù)對(duì)于指定的緩沖區(qū)來講太大。 這樣,我們導(dǎo)數(shù)據(jù)當(dāng)然就失敗了!這個(gè)也許不能算bug,因?yàn)橹皇菍?shí)現(xiàn)得不好(取某列前8行的最大長(zhǎng)度并不能真正代表所有行,我想microsoft的工程師為了簡(jiǎn)單或者提高性能才這樣做的);也許算是bug,因?yàn)椴恢榈挠脩魧?dǎo)數(shù)據(jù)失敗了。而且不知道為何而失敗的! 公理自在人心,讓大家或那些工程師們?nèi)ピu(píng)判吧!
標(biāo)簽:
excel
排行榜