从openrowset混合types的SQL导入正确

我在Excel中有一列,我试图导入,它包括如下代码:

  • 01166
  • 1166
  • 2354654765432
  • xx132

我使用IMEX = 1,一切都导入为TEXT,但是当我使用nvarchartypes将select分配给临时表时,具有长数字的代码变得不正确:

1001051 becomes 1.00105e+006 

我试图投到bigint,但这使得代码在01166失去领先的0

这是我目前的查询:

 INSERT INTO #XTEMP SELECT DISTINCT (CASE ISNUMERIC([item_code]) WHEN 1 THEN CAST(CAST([item_code] AS BIGINT) AS nvarchar) ELSE CAST([item_code] AS nvarchar) END) FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0 Xml;HDR=YES;IMEX=1;Database=C:\path\file.xls', 'SELECT * FROM [sheet$]') 

IMEX=1允许读取混合列; 它不会强制数据值为文本。 看看这个SO页面 ,你可以看到一个可能的解决方法,如果你设置HDR=NO ,但是有它自己的复杂性。

如果可以,最好的办法是将电子表格中列的格式设置为文本。

不完全是一个修复,但更像是一个工作; 我写了一个Excelmacros,在代码中添加了一个字符(例如“B”),然后在使用Openrowset导入时将其删除,例如:

 select RIGHT([code], LEN([code])-1)