`

系统升级时常用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
 

 

分享到:
评论

相关推荐

    SQL常用优化方法

    在数据库管理领域,SQL(Structured Query Language)是用于管理和处理...理解并熟练运用上述方法,可以有效地提高SQL执行效率,提升整体系统性能。在实践中,应结合具体业务需求和数据库状态,灵活应用这些优化技巧。

    图书管理系统SQL版

    总的来说,《图书管理系统SQL版》通过集成SQL技术,实现了对图书管理的现代化升级,提升了工作效率,优化了用户体验。无论是对于图书馆的工作人员,还是对于广大的读者,这样的系统都是一个极大的福音,它将图书管理...

    oracle常用经典SQL查询方案

    根据给定的文件信息,以下是对“oracle常用经典SQL查询方案”的详细解析,涉及的知识点主要包括Oracle数据库中的数据字典视图、空间管理、对象管理、版本查询、数据库模式、性能监控等方面。 ### 1. 查询表空间大小...

    SQLserver数据库系统开发基础

    SQL Server数据库系统开发基础主要涉及以下几个关键知识点: 1. 数据库类型:提到的数据库分为桌面型,如Access、VFP和Excel,以及网络数据库,如SQL Server 2000。桌面型数据库通常用于小型应用,而SQL Server ...

    asp.net+sql酒店管理系统

    ASP.NET和SQL Server是开发高效、稳定的企业级应用程序的常用技术组合,尤其在构建管理信息系统,如酒店管理系统时,它们的优势尤为突出。本系统以ASP.NET作为前端开发工具,利用SQL Server作为后台数据库,通过高效...

    宿舍信息管理系统ssh+sqlServer2005

    这样的设计使得宿舍信息管理更加规范,数据安全性得到保障,同时便于系统扩展和升级。 7. **学习与实践**:对于初学者来说,理解并掌握SSH框架及SQL Server的使用,是提升Java Web开发技能的重要一步。通过对这个...

    c#连接sql的图书管理系统

    系统在设计时需考虑安全性,如防止SQL注入攻击,通过参数化查询或ORM工具避免直接拼接SQL语句。此外,还要注意性能优化,如合理设置索引、批量处理数据、缓存常用查询结果等,提高系统的响应速度。 六、未来扩展 ...

    图书馆借阅管理系统-vb+sql

    《图书馆借阅管理系统-vb+sql》是一款基于Visual Basic(VB)编程语言和SQL数据库技术构建的图书管理软件。...通过不断优化和升级,此类系统能够满足图书馆日益增长的服务需求,提升图书馆的数字化管理水平。

    JSP社团管理系统的设计与实现sqlserver

    《JSP社团管理系统的设计与实现sqlserver》是一个基于JSP技术构建的社团管理平台,它旨在为社团活动的组织和管理提供便捷、高效的支持。...同时,系统的可扩展性和维护性也为其在未来的发展和升级奠定了坚实的基础。

    SQLPrompt_7.2.2.273_SQL2008R2可用.zip

    SQL Server 2008 R2是Microsoft推出的一个关系数据库管理系统,属于SQL Server 2008系列的升级版。它提供了许多增强功能,包括Master Data Services(主数据服务)以支持数据治理,PowerPivot for Excel用于商业智能...

    oracle_dba常用sql脚本分类文档

    在这个"oracle_dba常用sql脚本分类文档"中,我们可能会发现一系列针对DBA工作的实用SQL脚本,这些脚本能够帮助提升工作效率,确保数据库的稳定运行。 1. 数据库安装与升级: 在Oracle数据库的部署过程中,DBA需要...

    JSP网上在线书店售书系统设计(SQL2000,SQL2005)

    《JSP网上在线书店售书系统设计(SQL2000,SQL2005)》是一个基于JavaServer Pages(JSP)技术构建的电子商务应用程序,主要用于实现线上图书销售的功能。该系统采用SQL Server数据库(包括SQL Server 2000和SQL Server...

    系统分析师常用工具

    在IT行业中,系统分析师扮演着至关重要的角色,他们负责理解业务需求,设计并实施解决方案,以优化或改进现有的系统。...通过深入理解和运用这些工具,系统分析师能够更好地服务于业务需求,推动系统的有效升级和优化。

    毕业设计(论文)-基于ASP和SQL Server的网站后台管理系统-用户管理模块开发及实现

    本文是关于毕业设计的一个项目——基于ASP和SQL Server的江汉大学网站后台管理系统,尤其是用户管理模块的开发与实现。随着互联网的快速发展,它对教育领域产生了深远影响,促使学校网站必须适应网络化的趋势,提升...

    SQL数据库系统课程设计.doc

    在设计火车订票管理系统时,需要考虑到系统的维护和升级,以确保系统的可靠性和高效性。 10. 客户需求分析 在设计火车订票管理系统时,需要分析客户的需求,确保系统能够满足客户的需求和期望。 11. 系统架构设计...

    学生选课SQL SERVER

    - **监控与调优**:使用 SQL Server 提供的工具监控数据库性能,识别瓶颈,进行参数调整或硬件升级。 - **错误处理**:了解如何处理常见的数据库错误,如死锁、资源争抢等。 这个"学生选课SQL"项目为初学者提供了...

    基于Asp.net框架和Sql数据库的学生选课系统

    【基于Asp.net框架和Sql数据库的学生选课系统】是一个集成化的在线教育管理平台,它利用ASP.Net技术作为前端开发工具,与SQL数据库相结合,构建了一个高效、安全且功能丰富的学生选课系统。该系统主要服务于学生、...

    成绩查询系统 vb+sql 源码+程序

    【未来发展】:随着技术的进步,可以考虑将此系统升级到更现代的技术栈,如.NET Framework或.NET Core,同时利用更先进的数据库系统如MySQL、SQL Server或Oracle,以提高系统的可扩展性和安全性。 总结来说,"成绩...

Global site tag (gtag.js) - Google Analytics