首页 > 数据库 >Excel 生成 MS SQL 插入脚本

Excel 生成 MS SQL 插入脚本

时间:2023-10-23 09:13:33浏览次数:39  
标签:脚本 DBO Excel 数据表 A2 MS SQL

背景:
有1份 Excel 表内有一字段是中英文混合(前部分中文+后部分英文),现需要拆分中文和英文,并按记录条数插入到数据库中。

关键功能点:
1、一个字符串拆分为中文和英文。
2、去除字符串前后空格。
3、去除换行符。
4、生成MSSQL INSERT 脚本。Excel 的每行数据对应一条插入脚本。


方案一:
1、拆分数据。利用 Excel 拆分公式,分别从混合列获取中文或英文。
拆分公式:
--中文在右,英文在左
英文=LEFT(A2,LEN(A2)*2-LENB(A2))
中文=RIGHT(A2,LENB(A2)-LEN(A2))

--中文在左,英文在右
中文=LEFT(A2,LENB(A2)-LEN(A2))
英文=RIGHT(A2,LEN(A2)*2-LENB(A2))

2、修正数据。利用 TRIM()和CLEAN()公式去除空格和换行符。
3、在 MS 数据库中创建目标数据表。
4、从 Excel 复制需要的列,粘贴到数据表编辑行中,执行SQL。
5、在 MS 数据库,任务->生成脚本->选择具体的数据库对象(目标数据表)->表->高级->常规->要编写脚本的数据的类型->仅限数据->选择文件保存路径->下一步即可生产脚本。


方案二:
1、在 MS 数据库中创建临时数据表。
2、从 Excel 复制需要的列,粘贴到临时数据表编辑行中,执行SQL。
3、利用 MS 标量值函数拆分。用下面脚本创建标量值函数。
3.1.提取数字
IF OBJECT_ID('DBO.GET_NUMBER2') IS NOT NULL
DROP FUNCTION DBO.GET_NUMBER2
GO
CREATE FUNCTION DBO.GET_NUMBER2(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^0-9]%',@s),1,'')
END
RETURN @S
END
GO

3.2.提取英文
IF OBJECT_ID('DBO.GET_STR') IS NOT NULL
DROP FUNCTION DBO.GET_STR
GO
CREATE FUNCTION DBO.GET_STR(@S VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^a-z]%',@S) > 0
BEGIN
set @s=stuff(@s,patindex('%[^a-z]%',@s),1,'')
END
RETURN @S
END
GO

3.3.提取中文
IF OBJECT_ID('DBO.CHINA_STR') IS NOT NULL
DROP FUNCTION DBO.CHINA_STR
GO
CREATE FUNCTION DBO.CHINA_STR(@S NVARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
WHILE PATINDEX('%[^吖-座]%',@S) > 0
SET @S = STUFF(@S,PATINDEX('%[^吖-咗]%',@S),1,N'')
RETURN @S
END
GO
4、编写SQL脚本,从临时数据表中查询出数据。
5、根据每行数据编辑成 INSERT 脚本。
6、第5步也可以将数据插入到目标表,然后在 MS 数据库,任务->生成脚本->选择具体的数据库对象->表->高级->常规->要编写脚本的数据的类型->仅限数据->选择文件保存路径->下一步即可生产脚本。


关键功能点:
1、一个字符串拆分为中文和英文。
2、去除字符串前后空格。
3、去除换行符。
4、生成MSSQL INSERT 脚本。Excel 的每行数据对应一条插入脚本。

标签:脚本,DBO,Excel,数据表,A2,MS,SQL
From: https://www.cnblogs.com/johsan/p/17781613.html

相关文章

  • 轻松合并Excel工作表:Java批量操作优化技巧
    摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。前言在Excel中设计表单时,我们经常需要对收集的信息进行统计分析。例如,学校给老师统计课时,医院给医护人员统计班次等。传统的手工方式需要......
  • mysql导入.cvs
    workbench新建1张表,没有import按钮,原因是没有设置主键将一个字段设置为主键后,即可导入数据将要导入的数据文件改为utf-8的格式,使用记事本打开查看选择文件选择数据库表查看字段与数据是否对应开始导入......
  • mysql case when then else 语法
    update`badges`set`cat_point`=CASEWHENlevel>=1THENPOW(2,`level`-1)ELSE0ENDwherenamenotlike'%Steam%'; if level>=1:  cat_point=POW(2,`level`-1)else:  cat_point=0......
  • MYSQL语句
    MySQL常用基础语句cmd登录mysql-hlocalhost-uroot-pSHOW语句返回可用数据库列表showdatabases;返回当前选择数据库内可用表的列表showtables;显示表中的所有列(xxx:表名)showcolumnsfromxxx;ordescribexxx;显示服务器状态信息showstatus;显示创建特定......
  • 得到sqlite的数据条数的代码
    https://blog.csdn.net/weixin_35754962/article/details/129060944importsqlite3conn=sqlite3.connect('example.db')cursor=conn.cursor()#查询数据条数cursor.execute("SELECTCOUNT(*)FROMtable_name")count=cursor.fetchone()[0]pri......
  • PgSQL
    altertabletable_namealtercolumncolumn_namenew_typeCREATETABLEpublic.t2(idserialprimarykey,namecharactervarying(40)NOTNULL,authorcharactervarying(40)NOTNULL,commentcharactervarying(40)NOTNULL,contentchar......
  • MYSQL
    什么是事务事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,......
  • oracle查询执行过sql语句
    一、oracle中查找某段时间执行的操作记录selectsql_text,module,first_load_timefromv$sqlareawherefirst_load_time>'2019-02-02/02:02:02'andfirst_load_time<'2019-02-02/02:02:02'orderbyfirst_load_time二、查看某一时间的执行过的所有sqlselect......
  • 在Excel中,“趋势线”的相关解释与选择
    Excel“趋势线”解释与选择,其中有“指数趋势线”、“线性趋势线”、“对数趋势线”、“多项式趋势线”、“幂趋势线”、“移动平均趋势线”几项可选,这几项趋势分别代表什么含义如下:曲线图中趋势线主要是调节曲线的平滑度,高度,弯曲度等等。“指数”、“线性”、“对数”、“多项......
  • MySQL分享
    本次分享主要涉及InnoDB如何在磁盘上保存数据InnoDB表空间结构:介绍了InnoDB表文件中的一些组件,比如段、区、页、行记录。除了告诉你怎样存之外,更重要的是希望解释为什么要这样索引页结构:数据以及索引都存在于索引页中,介绍索引页如何组织,当数据删除、更新时会发生啥索引分裂、......