将 Excel 转换为 SQL Server
拖入你的 Excel 文件,即可得到包含 CREATE TABLE 和 INSERT 语句的 SQL Server 脚本。每列都会获得类型,每处修正都会连同所在行和列一起列出。
已转换 4 行,10 处修正,无拒绝
| 行 | ||||||
|---|---|---|---|---|---|---|
| 5 | 00127 | Peña Muñoz | 01234 | 03/02/2024 | sí | 1.234,50 |
| 6 | 00128 | José Ángel | 09870 | 15/02/2024 | no | N/A |
| 7 | 00129 | Zoë Ortíz | 44100 | 29/02/2024 | sí | -12,00 |
| 8 | 00130 | Ñuño Castañeda | 06700 | 11/03/2024 | no | 980,75 |
-- Written by IntoSQL for SQL Server.
SET NOCOUNT ON;
BEGIN TRANSACTION;
CREATE TABLE clientes_2024 (
no_cliente nvarchar(8) NOT NULL, -- Nº Cliente
nombre nvarchar(16) NOT NULL,
c_p nvarchar(8) NOT NULL, -- C.P.
alta date NOT NULL,
activo bit NOT NULL,
saldo decimal(6,2)
);
INSERT INTO clientes_2024 (no_cliente, nombre, c_p, alta, activo, saldo) VALUES
(N'00127', N'Peña Muñoz', N'01234', '2024-02-03', 1, 1234.50),
(N'00128', N'José Ángel', N'09870', '2024-02-15', 0, NULL),
(N'00129', N'Zoë Ortíz', N'44100', '2024-02-29', 1, -12.00),
(N'00130', N'Ñuño Castañeda', N'06700', '2024-03-11', 0, 980.75);
COMMIT TRANSACTION;
修正
- 表头在第 4 行;其上方的行未包含在内。
- 第 9 行("TOTAL")是合计行,因此未包含在内。
- 列 "Nº Cliente" 已改名为 no_cliente,这样 SQL Server 无需引号即可读取。
- 列 "C.P." 已改名为 c_p,这样 SQL Server 无需引号即可读取。
- 已保留 "Nº Cliente" 中的前导零:00127 仍为 00127,以文本存储。
- 已保留 "C.P." 中的前导零:01234 仍为 01234,以文本存储。
- 15/02/2024 证明 "Alta" 中的日期是日在前,因此 03/02/2024 读作 2024‑02‑03。
- "Activo" 包含是/否类词语(sí, no),已存储为布尔值。
- "Saldo" 中的数字使用小数逗号:1.234,50 读作 1234.50。
- "Saldo" 中的 N/A 已读作空值(4 个值中有 1 个)。
文件在这台电脑上转换,永远不会上传。
其他示例:
从 Excel 到 SQL Server,逐列说明
上方的示例 clientes_2024.xlsx 由 IntoSQL 为 SQL Server 写出的结果:每列在文件中的内容、获得的类型,以及第一个值在脚本中的写法。
| 文件中 | 第一个值 | 列 | SQL Server 类型 | 脚本中 |
|---|---|---|---|---|
| Nº Cliente | 00127 | no_cliente | nvarchar(8) | N'00127' |
| Nombre | Peña Muñoz | nombre | nvarchar(16) | N'Peña Muñoz' |
| C.P. | 01234 | c_p | nvarchar(8) | N'01234' |
| Alta | 03/02/2024 | alta | date | '2024-02-03' |
| Activo | sí | activo | bit | 1 |
| Saldo | 1.234,50 | saldo | decimal(6,2) | 1234.50 |
将脚本导入 SQL Server
下载的是普通的 .sql 文件。用 SQL Server 自带的工具运行即可。
在终端中
sqlcmd -S localhost -d mydb -f 65001 -i clientes_2024.sql_server.sql-f 65001 以 UTF-8 读取文件,因此重音字符和 ñ 会按原样导入。
在数据库工具中
在 SQL Server Management Studio 或 Azure Data Studio 中打开文件,然后选择 Execute。
关于 Excel 文件和 SQL Server 需要了解的内容
IntoSQL 如何读取 Excel 文件
- 即使表头行上方有标题或备注,也能找到表头行,末尾的合计行会被排除。
- 以 Excel 序列号存储的日期会变成真正的日期,1900 和 1904 两种日期系统都支持。
- 带前导零的代码(如 00127)保持为文本。工作簿有多个工作表时,由你选择工作表。
关于 SQL Server 需要了解的内容
- 文本为 nvarchar,值写作 N'...',因此重音字符得以保留;超过 4000 个字符的文本变为 nvarchar(max)。
- 是与否的值变为 bit,带时区偏移的日期变为 datetimeoffset。
- 长值会分段写入,因此 sqlcmd 和 SQL Server Management Studio 都能接受该脚本。
各类值在 SQL Server 中的存储方式
| 值 | SQL Server |
|---|---|
| 是与否 | bit |
| 整数 | int |
| 大整数 | bigint |
| 小数 | decimal(p,s) |
| 浮点数 | float |
| 日期 | date |
| 时刻 | time |
| 带时间的日期 | datetime2 |
| 带时间和时区偏移的日期 | datetimeoffset |
| 文本 | nvarchar(n)nvarchar(max) |
关于 Excel 转 SQL Server 的问题
这里没有你要的答案?请通过联系页面给我们留言,会有专人回复。 联系页面
如何将 Excel 转换为 SQL Server?
将文件拖到本页顶部的转换器上。它会找到表头、读取每个值并写出 SQL Server 脚本,同时列出每处修正。下载脚本后用 sqlcmd 运行。
会转换工作簿中的哪个工作表?
第一个可见的工作表。工作簿有多个工作表时,会出现"工作表"选项,你可以选择其他工作表。
它使用哪些 SQL Server 类型?
是/否值变为 bit,整数变为 int,小数变为 decimal(p,s),日期变为 date,带时间的日期变为 datetime2,文本变为 nvarchar(n)。长度取自每列中最长的值。
在 SQL Server 中会保留前导零吗?
会。像 00127 这样的代码保持为文本,因此 SQL Server 将其存储为 nvarchar(8),脚本中写作 N'00127'。
能不用脚本直接把数据导入 SQL Server 吗?
不能。请下载脚本并用 sqlcmd 运行。PostgreSQL、MySQL、MariaDB 和 SQLite 支持通过桌面应用或命令行直接导入。
Excel 文件可以多大?
在浏览器中,工作簿需要整体读取,因此上限取决于浏览器分配给本页的内存。桌面应用和命令行可处理任意大小的工作簿;在 Apple M4 笔记本电脑上,命令行转换一个 117 MB、一百万行的工作簿约需一秒。