从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)