2b4fITin Asked:2025-02-09 14:47:10 +0000 UTC2025-02-09 14:47:10 +0000 UTC 2025-02-09 14:47:10 +0000 UTC 从 Excel 导出到 MS SQL(Excel 表包含空单元格,在 MS SQL 中应为 NULL) 772 问题:使用在其他地方编写的宏(连接数据库;循环遍历 Excel 表中所需的单元格;将循环中获得的单元格值传输到函数;INSERT INTO在函数中;处理 SQL 注入)将表从 Excel(包含空单元格)导出到 MS SQL 后,在 MS SQL 中的表中我们得到的是空单元格,而不是 NULL 值。 问题:如何确保 MS SQL 中的结果表中的空单元格(屏幕上用红点标记)不是“空的”,而是NULL? sql 2 个回答 Voted Best Answer Yitzhak Khabinsky 2025-02-11T00:45:39Z2025-02-11T00:45:39Z 这是一个基于 Microsoft ACE OLEDB Provider 16.0 通过 T-SQL 提供的简单解决方案 点击此处下载 一个 T-SQL 语句!!! 完整路径c:\<fully_qualified_path>\input.xlsx必须能够从 SQL Server 访问。 此方法将把空的 Excel 单元格加载为 NULL。 并且不要忘记关闭 Excel,否则 *.xlsx 文件将被阻止。 SQL INSERT INTO targetTable SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.16.0', 'Excel 12.0 Xml; HDR=NO; Database=c:\<fully_qualified_path>\input.xlsx', [Sheet1$]); Roman C 2025-02-09T19:44:43Z2025-02-09T19:44:43Z 要使用INSERTNULL 值插入,需要将它们指定为值而不是空字符串。或者,使用动态 SQL,排除空列。 如果插入空字符串,则必须使用函数LEN()来检查是否为空字符串。之后,使用表达式 CASE WHEN LEN(@InputValue)=0 THEN NULL ELSE @InputValue END 转换输入值。
这是一个基于 Microsoft ACE OLEDB Provider 16.0 通过 T-SQL 提供的简单解决方案
点击此处下载
一个 T-SQL 语句!!!
完整路径
c:\<fully_qualified_path>\input.xlsx必须能够从 SQL Server 访问。此方法将把空的 Excel 单元格加载为 NULL。
并且不要忘记关闭 Excel,否则 *.xlsx 文件将被阻止。
SQL
要使用
INSERTNULL 值插入,需要将它们指定为值而不是空字符串。或者,使用动态 SQL,排除空列。如果插入空字符串,则必须使用函数
LEN()来检查是否为空字符串。之后,使用表达式转换输入值。