`

系统升级时常用SQL

阅读更多

SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

   Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少。但我们在开发、测试过程中,经常会遇到需要表复制的情况,如将 一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了。

1.INSERT INTO SELECT语句

      语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

      要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。示例如下:

   --1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]

    create TABLE Table2
    (
        a varchar(10),
        c varchar(10),
        d int,
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO
    --2.创建测试数据
    Insert into Table1 values('赵','asds','90')
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)
    GO
    select * from Table2

    --3.INSERT INTO SELECT语句复制表数据
    Insert into Table2(a, c, d) select a,c,5 from Table1
    GO

    --4.显示更新后的结果
    select * from Table2
    GO
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

  2.SELECT INTO FROM语句

      语句形式为:SELECT vale1, value2 into Table2 from Table1

      要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中 。示例如下:

 --1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO

    --2.创建测试数据
    Insert into Table1 values('赵','asds','90')
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)
    GO

    --3.SELECT INTO FROM语句创建表Table2并复制数据
    select a,c INTO Table2 from Table1
    GO

    --4.显示更新后的结果
    select * from Table2
    GO
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

 利用带关联子查询Update语句更新数据

       Update是T-sql中再简单不过的语句了,update table set column=expression   [where condition],我们都会用到。但update的用法不仅于此,真正在开发的时候,灵活恰当地使用update可以达到事半功倍的效果。

      假定有表Table1(a,b,c)和Table2(a,c),现在Table1中有些记录字段c为null,要根据字段a在Table2中查找,取出字 段a相等的字段c的值来更新Table1。一种常规的思路,通过游标遍历Table1中字段c为null的所有记录,在循环体内查找Table2并进行更 新,即用游标Cursor的形式。测试sql语句如下:

--1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]

    create TABLE Table2
    (
        a varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO
    --2.创建测试数据
    Insert into Table1 values('赵','asds',null)
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)

    Insert into Table2 values('赵','90')
    Insert into Table2 values('钱','100')
    Insert into Table2 values('孙','80')
    Insert into Table2 values('李','95')
    GO
    select * from Table1

    --3.通过游标方式更新
    declare @name varchar(10)
    declare @score varchar(10)
    declare mycursor cursor for select a from Table1 where c is null
    open mycursor
    fetch next from mycursor into @name
    while(@@fetch_status = 0)
    BEGIN
        select @score=c from Table2 where a=@name
        update Table1 set c = @score where a = @name
        fetch next from mycursor into @name    
    END
    close mycursor
    deallocate mycursor
    GO
    --4.显示更新后的结果
    select * from Table1
    GO
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2

  虽然用游标可以实现,但代码看起来很复杂,其实用Update根据子关联来更新只要一条语句就可以搞定了,测试代码如下:

  --1.创建测试表
    create TABLE Table1
    (
        a varchar(10),
        b varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]

    create TABLE Table2
    (
        a varchar(10),
        c varchar(10),
        CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED
        (
            a ASC
        )
    ) ON [PRIMARY]
    GO
    --2.创建测试数据
    Insert into Table1 values('赵','asds',null)
    Insert into Table1 values('钱','asds','100')
    Insert into Table1 values('孙','asds','80')
    Insert into Table1 values('李','asds',null)

    Insert into Table2 values('赵','90')
    Insert into Table2 values('钱','100')
    Insert into Table2 values('孙','80')
    Insert into Table2 values('李','95')
    GO
    select * from Table1

    --3.通过Update方式更新
    Update Table1 set c = (select c from Table2 where a = Table1.a) where c is null
    GO

    --4.显示更新后的结果
    select * from Table1
    GO
    --5.删除测试表
    drop TABLE Table1
    drop TABLE Table2
 

 

分享到:
评论

相关推荐

    迷你版SQL2000服务器

    +增加SQL Tips页,记录一些常用的SQL语句,方便查阅; ^标题栏解锁界面和密码修改页面进行调整,增加多语言支持。 1.2.2 *附加数据库时,修正输入库名时点取消后没有中止附加等错误; +增加面板锁,点击左上角的...

    迷你SQL2000

    +增加SQL Tips页,记录一些常用的SQL语句,方便查阅; ^标题栏解锁界面和密码修改页面进行调整,增加多语言支持。 1.2.2 *附加数据库时,修正输入库名时点取消后没有中止附加等错误; +增加面板锁,点击左上角的...

    基于的JAVA+SQL电子通讯录带系统托盘设计与实现(lw+源代码)

    该软件基于JAVA与SQL技术,具有添加、编辑、查询、删除等多种功能,并且在系统托盘内提供关闭、最小化等一系列常用的小功能。该软件适用于需要管理通讯录的个人用户、企业员工和学生等,使用场景包括个人通讯录、...

    (asp.net + C# +sqlserver + 分析文档)开发的游戏信息与下载发布系统(源码).rar

    (asp.net + C# +sqlserver + 分析文档)开发的游戏信息与下载发布系统(源码).rar 摘要:随着电脑配置的升级 ,玩游戏也成为电脑的一个用途。在互联网流行的时代,游戏发布下载网站也成为一个人们常用的网站。本...

    UWA 2.X UTF-8 (v2.3.9_to_v2.3.10) 升级程序.zip

    UWA 这只是一个升级包,下载时请注意! [优化]优化批量删除同 IP 评论及留言 [优化]优化跳转模板 [优化]优化默认幻灯片显示 [修复]修复升级程序执行 SQL UWA 注意事项 1、在使用升级程序之前,确保您已经对...

    ASP EXCEL导入SQL

    我们今天以企业用户常用的CRM系统,来看一看标准的SaaSCRM应该是一个什么样子。  实际上,很多用户对于CRM并不陌生,早在2000年的时候,有一些企业就已经开始尝试CRM系统。在很多人眼中,CRM就是一套C/S或者B/S的...

    JTBC网站内容管理系统 v2.0.1.3 for Sql (.NET).rar

    JTBC网站内容管理系统是一套真正免费的,开源的,可对现有模块进行扩充与克隆的网站系统核心,采用UTF-8编码,采取 语言-代码-程序两两分离的技术模式,全面使用了模板包与语言包结构,为用户的修改提供方便,网站...

    悠索工作任务系统 v6.3.3.zip

    悠索工作任务系统升级日志版本号:6.3.3.0527 1、整个系统全新升级名字空间为Us.Web,系统更简洁,运行效率更高; 2、启用新的编辑器进行页面的编辑; 3、重新录入考评数据,一些不需要的字段可以直接不显示; 4...

    新源人力资源管理系统网络版人事管理系统

    01.可以支持单机、网络、远程:我们是做在同一个平台里面的,所以用户可以比较方便的从单机升级为网络,网络升级为远程,这一个过程不会影响到任何数据信息,以方便用户随着业务的扩大而对系统的进一步升级要求;...

    人事档案管理系统源码 v5.0.0.zip

    1、导入根目录下的default.sql数据库,test.sql为测试数据库 2、修改数据库配置文件 根目录下application/database.php 第18行,20行,22行 3、默认账户:system 密码:123456 4、请把访问入口指向public下 5、...

    《库管大师(SQL Server 2000 网络版)》

    运行1.6版本,打开系统菜单“数据升级” 3.如果您是注册用户,可以输入我们提供的升级密码或者向我们索要 4.升级完成。 使用: 第一次运行,用户名和密码均为空,直接登陆即可。 软件标签: 该软件以库存管理...

    虚拟主机管理系统是针对销售 主机、邮局、数据库等产品时效率低、管理难等问题而自主研发的集产品自动化开通、管理、续费、升级等功能为一体的软件系统

    虚拟主机管理系统是针对销售 主机、邮局、数据库等产品时效率低、管理难等问题而自主研发的集产品自动化开通、管理、续费、升级等功能为一体的软件系统。通过一年多的改进与运作,软件已具有功能强大、安全稳定、...

    MCMS内容管理系统 v4.5.2.zip

    技术支持:提永久升级服务技术交流群,不定期会升级系统,开发可以关注后台的更新板块; MCMS内容管理系统开发框及语言 铭飞MCMS(铭飞内容管理系统)是一款支持不同平台、不同终端并且支持多站点的内容管理系统, ·...

    三驱餐饮收银系统 v15.06.18.zip

    三驱餐饮收银系统是专为小型餐厅、酒楼、...2、完善升级功能:解决网上系统升级中防火墙影响的问题。 3、程序优化:因应本地运行和使用云服务器数据库两种的不同情况,优化程序,提高运行速度。 三驱餐饮收银系统截图

    4款经典政府网站后台管理系统模板

    因为系统经过多年发展,其间综合了大量用户的切身使用体验,大大小小经过上百次的升级更新,在操作上不断追求人性化,功能上在也日趋完善,其中的自定义模型功能更是让用户可以轻松开发出自己的个性化功能。...

    delphi三层框架+delphi源码MES生产管理系统

    一,框架简介 1,本套源码主要是用来开发企业应用系统如:erp ,mes,hrms,进销存等制造业内部应用系统;...客户端使用的是ms sql数据库,用到DevExpressVCL与FastReport控件,没有任何权限限制,可放心使用!

    中小型彩印包装生产系统.zip

    中小型彩印包装生产系统简介 “25175数字化企业—小型彩印包装生产系统”的建设,是要建立一个订单查询与维护的系统,能完成订单的新建、已建的修改和删除、异动、处理、管理、查询、报表的...同类推荐:站长常用源码

    千博装饰建材装修网站系统 v2018 Build0801.zip

    扩展性强、多国语言支持:系统具有高度的系统可扩展性,并支持多种数据库,用户根据自身业务种类和数据处理能力的需求,来选择搭载Access数据库还是MS SQL数据库。此外,“千博企业网站管理系统”网站页面和数据库均...

    选课系统 v1.0.zip

    一、选课系统源码描述 这是一款功能比较完整的选课系统源码,比较具有学习的价值, ...1、vs版本升级为vs2010,数据库版本更新为sql2005,框架升级为2.0.       相关阅读 同类推荐:站长常用源码

    ASPNETZUCK仿通达企业OA系统源码

    3、系统设计开发的规范性与全面性,利于系统的实现、测试、维护、版本升级等。开发人员既可全面了解OA系统所涉及的业务,也能对本身技术提升有所助益,同时减轻了团队开发压力,节约了开发成本; 4、采用B/S架构,...

Global site tag (gtag.js) - Google Analytics