T-SQL笔记2:INSERT、UPDATE和DELETE

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: T-SQL笔记2:INSERT、UPDATE和DELETE 本章摘要 1:显示向一个IDENTITY列插入值 2:在表中插入拥有UNIQUEIDENTIFIER列的行 3:使用INSERT……SELECT语句插入多行 4:调用存储过程插入数据 5:根据FROM和WHERE字句更新行 6:更新大值数据类型的列 7:使用OPENROWSET和BULK插入或更新图片文件 8:DELETE 9:截断表 10:使用TOP分块修改数据   1:显示向一个IDENTITY列插入值      IDENTITY通常用作代理键(代理键是指由数据库生成的唯一的主键)。

T-SQL笔记2:INSERT、UPDATE和DELETE

本章摘要

1:显示向一个IDENTITY列插入值

2:在表中插入拥有UNIQUEIDENTIFIER列的行

3:使用INSERT……SELECT语句插入多行

4:调用存储过程插入数据

5:根据FROM和WHERE字句更新行

6:更新大值数据类型的列

7:使用OPENROWSET和BULK插入或更新图片文件

8:DELETE

9:截断表

10:使用TOP分块修改数据

 

1:显示向一个IDENTITY列插入值

     IDENTITY通常用作代理键(代理键是指由数据库生成的唯一的主键)。允许将显式值插入表的标识列中,必须使用SET IDENTITY_INSERT命令。

    语法:SET IDENTITY_INSERT [ database_name . [ schema_name ] . ] table { ON | OFF }

database_name 定的表所在的数据库的名称。

schema_name 所属架构的名称。

table 包含标识列的表的名称。

任何时候,一个会话中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON。如果某个表已将此属性设置为 ON,则对另一个表发出 SET IDENTITY_INSERT ON 语句时,SQL Server 将返回一个错误信息,指出 SET IDENTITY_INSERT 已设置为 ON,并报告已将其属性设置为 ON 的表。

如果插入值大于表的当前标识值,则 SQL Server 自动将新插入值作为当前标识值使用。

     下面的语句假设ID为IDENTITY键,则会报错:

INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel')

     要使得语句顺利执行,必须:

SET IDENTITY_INSERT dbo.Tool ON 

INSERT INTO dbo.Tool (ID, Name) VALUES (3, 'Garden shovel')

SET IDENTITY_INSERT dbo.Tool OFF

 

2:在表中插入拥有UNIQUEIDENTIFIER列的行

     UNIQUEIDENTIFIER数据类型存储了一个16字节的GUID。在INSERT的VALUES字句中使用NEWID()函数,可以得到这个GUID。

 

3:使用INSERT……SELECT语句插入多行

      使用INSERT...SELECT可以向表中插入多行。

     语法:INSERT [INTO] table_or_view_name [ (column_list) ] SELECT column_list FROM data_source

     如下列语句:

INSERT Shift_Archive (ShiftID, Name, StartTime, EndTime, ModifiedDate) SELECT ShiftID, Name, StartTime, EndTime, ModifiedDate FROM HumanResources.Shift ORDER BY ShiftID

 

4:调用存储过程插入数据

      既然能使用INSERT...SELECT向表中插入多行,那么使用存储过程也一样可以达到如此效果。

     语法:INSERT [INTO] table_or_view_name [ (column_list) ] EXEC stored_procedure_name [参数, …]

 

5:根据FROM和WHERE字句更新行

    直接看示例:假设Production.Product表中有一个产品名臣“LMJ”,对于每一位顾客只允许购买两个。为了达到这个查询的目的,任何购物车中只要这个产品的数量超过两个,都要立刻调整为所要求的数量:

UPDATE Sales.ShoppingCartItem
SET Quantity=2, ModifiedDate=GETDATE()
FROM Sales.ShoppingCartItem c
INNER JOIN Production.Product p ON
    c.ProductID = p.ProductID
WHERE p.Name='LMJ' AND c.Quantity > 2

 

6:更新大值数据类型的列

    SQLSERVER中带(MAX)的字段,均为大值数据类型。

    来看示例:

CREATE TABLE RecipeChapter
    (ChapterID int NOT NULL, Chapter varchar(max) NOT NULL)

INSERT RecipeChapter values( 1, '1234567890')

UPDATE RecipeChapter SET Chapter.WRITE('666',6, 3) WHERE ChapterID=1

    根据示例,我们知道,插入大值数据,跟普通的插入语法没有区别。不过,在更新大值数据的时候,SQLSERVER2005提供新的语法.WRITE来提高效率。

 

7:使用OPENROWSET和BULK插入或更新图片文件

    看示例,我们将系统中的图片文件插入或更新到表中:

CREATE TABLE StockGifs
    (StockGifID int NOT NULL,
     Gif varbinary(max) NOT NULL)

INSERT StockGifs (StockGifID, Gif)
SELECT 1, BulkColumn FROM OPENROWSET(BULK'C:\XXX.gif', SINGLE_BLOB) AS x

SELECT * FROM StockGifs WHERE StockGifID=1

 

8:DELETE

    示例:

    DELETE Production.Example_ProductProductPhoto WHERE ProductID NOT IN (SELECT ProductID FROM Production.Product)

 

9:截断表

    使用TRUNCATE可以截断表。由于它总是从表中删除所有的行,所以没有FROM和WHERE字句。示例:

--首先放入测试数据

SELECT * INTO Sales.Example_StoreContact FROM Sale.StoreContact

--然后截断

TRUNCATE TABLE Sales.Example_StoreContact

    注意:如果表有外键约束,则无法这样使用。

 

10:使用TOP分块修改数据

    使用TOP修改数据,能大幅提高性能并减少日志产出。示例:

WHILE( SELECT COUNT(*) FROM Production.Example_BillOfMaterials) > 0

    BEGIN

         DELETE TOP(500) FROM Production.Example_BillOfMaterials

    END

NET C# 入门级 .NET C# 专业级 .NET 架构级 BS系统专业级 BS系统安全
1.开篇及C#程序、解决方案的结构
2.源码管理之TFS入门
3.打老鼠初级
……
21.CMS之主要功能实现
22.进程和线程基础
23.类型转换
24.算法基础
25.初级课程之剩余知识点
1.消灭打老鼠游戏中的自定义委托
2.垃圾回收
3.Dispose模式
……
16.异常使用指导
17.最常用的重构指导
18.Debug和IDE的进阶
19.Resharper的使用
20.ILSPY的使用
1.Socket入门
2.打造打老鼠游戏网络版
3.WCF入门
……
10.依赖注入
11.万物兼可测试
12.软件指标之覆盖率计算
13.软件指标之代码行
14.软件指标之圈复杂度、嵌套深度
1.HTML
2.WebForm原理
3.CSS必知必会
……
19.让浏览器缓存Shop
20.Asp.net的生命周期
21.Asp.net网站的发布以及调试晋级
22.BS程序的本质
23.压力测试我们的Shop
1.Fiddler必知必会
2.IE开发者工具必知必会
3.跨站脚本防范
4.权限欺骗防范
5.参数越界防范
6.会话劫持防范
7.CSRF防范
8.盗链防范
9.静态文件的保护


 
 
Creative Commons License本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
16天前
|
SQL 存储 关系型数据库
SQL自学笔记(3):SQL里的DCL,DQL都代表什么?
本文介绍了SQL的基础语言类型(DDL、DML、DCL、DQL),并详细说明了如何创建用户和表格,最后推荐了几款适合初学者的免费SQL实践平台。
68 3
SQL自学笔记(3):SQL里的DCL,DQL都代表什么?
|
16天前
|
SQL 数据挖掘 数据库
SQL自学笔记(2):如何用SQL做简单的检索
本文深入介绍了SQL的基本语法,包括数据查询、过滤、排序、分组及表连接等操作,并通过实际案例展示了SQL在用户研究中的应用,如用户行为分析、用户细分、用户留存分析及满意度调查数据分析。
28 0
SQL自学笔记(2):如何用SQL做简单的检索
|
16天前
|
SQL 数据挖掘 关系型数据库
SQL自学笔记(1):什么是SQL?有什么用?
本文为用户研究新手介绍SQL(结构化查询语言),解释了SQL的基本概念、入门方法及在用户研究中的应用通过实际案例说明,如用户行为分析、用户细分和满意度调查数据分析,展示了SQL在用户研究中的重要作用。
42 0
SQL自学笔记(1):什么是SQL?有什么用?
|
3月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
67 1
|
4月前
|
SQL 关系型数据库 MySQL
INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
【8月更文挑战第7天】INSERT INTO t_a.tableName SELECT * FROM t_b.tableName 如何通过定义一个list对象,包含多个tableName,循环执行前面的sql,用MySQL的语法写
48 5
|
4月前
|
SQL 安全 关系型数据库
关系型数据库SQL server DELETE 语句
【8月更文挑战第3天】
117 10
|
4月前
|
SQL 关系型数据库 数据库
关系型数据库SQL server UPDATE 语句
【8月更文挑战第3天】
89 10
|
4月前
|
SQL 关系型数据库 BI
关系型数据库SQL server INSERT 语句
【8月更文挑战第3天】
81 9
|
SQL
SQL UPDATE 语句
SQL UPDATE 语句
152 0
|
SQL 关系型数据库 MySQL
下一篇
DataWorks