Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从openrowset混合类型[保持前导0、长整数和文本]正确导入SQL_Sql_Sql Server_Excel_Tsql_Openrowset - Fatal编程技术网

从openrowset混合类型[保持前导0、长整数和文本]正确导入SQL

从openrowset混合类型[保持前导0、长整数和文本]正确导入SQL,sql,sql-server,excel,tsql,openrowset,Sql,Sql Server,Excel,Tsql,Openrowset,我正在尝试导入Excel中的一列,其中包含如下代码: 01166 1166 2354654765432 xx132 我使用IMEX=1,所有内容都作为文本导入,但当我将select分配给nvarchar类型的临时表时,带有长数字的代码变得不正确: 1001051 becomes 1.00105e+006 我试图转换为bigint,但这会使代码在01166 这是我当前的查询: INSERT INTO #XTEMP SELECT DISTINCT (CASE ISNUMERIC([i

我正在尝试导入Excel中的一列,其中包含如下代码:

  • 01166
  • 1166
  • 2354654765432
  • xx132
我使用IMEX=1,所有内容都作为文本导入,但当我将select分配给nvarchar类型的临时表时,带有长数字的代码变得不正确:

1001051 becomes 1.00105e+006
我试图转换为bigint,但这会使代码在
01166

这是我当前的查询:

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
允许读取混合列;它不强制数据值为文本。 通过查看,如果您设置了
HDR=NO
,您可以看到一个可能的解决方法,但这有其自身的复杂性


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

不完全是一种修复方法,更像是一种解决方法;我编写了一个Excel宏,在代码中添加了一个字符(例如“B”),然后在使用Openrowset导入时将其删除,如:

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

我用了这个,但不得不跳过第一排