SQL Server笔记 -- 第15章:INSERT INTO

INSERT INTO语句用于在表中插入新记录。

第15.1节:插入多行数据

在SQL Server 2008或更高版本中插入多行数据:

sql 复制代码
INSERT INTO USERS 
VALUES (2, 'Michael', 'Blythe'),
       (3, 'Linda', 'Mitchell'),
       (4, 'Jillian', 'Carson'),
       (5, 'Garrett', 'Vargas');

在SQL Server的早期版本中插入多行数据,请像这样使用"UNION ALL":

sql 复制代码
INSERT INTO USERS (FIRST_NAME, LAST_NAME)
SELECT 'James', 'Bond'
UNION ALL
SELECT 'Miss', 'Moneypenny'
UNION ALL
SELECT 'Raoul', 'Silva'

注意,INSERT查询中的"INTO"关键字是可选的。另一个警告是,SQL Server在一个INSERT中只支持1000行,因此您必须将它们分批处理。

第15.2节:使用OUTPUT获取新Id

插入时,您可以使用OUTPUT INSERTED.ColumnName从新生成的行中获取值,例如新生成的Id - 如果您有IDENTITY列或任何类型的默认值或计算值,这将很有用。

当以编程方式调用此操作(例如,从ADO.net)时,您会将其视为普通查询,并像执行了SELECT语句一样读取值。

sql 复制代码
-- CREATE TABLE OutputTest ([Id] INT NOT NULL PRIMARY KEY IDENTITY, [Name] NVARCHAR(50))

INSERT INTO OutputTest ([Name]) 
OUTPUT INSERTED.[Id] 
VALUES ('Testing')

如果需要在同一组查询或存储过程中获取最近添加行的Id。

sql 复制代码
-- 创建一个表变量,其列的数据类型与Id相同
DECLARE @LastId TABLE ( id int);

INSERT INTO OutputTest ([Name]) 
OUTPUT INSERTED.[Id] INTO @LastId 
VALUES ('Testing')

SELECT id FROM @LastId

-- 我们可以在变量中设置该值并在过程后面使用
DECLARE @LatestId int = (SELECT id FROM @LastId)

第15.3节:从SELECT查询结果插入

要从SQL查询(单行或多行)检索的数据插入:

sql 复制代码
INSERT INTO Table_name (FirstName, LastName, Position)
SELECT FirstName, LastName, 'student' 
FROM Another_table_name

注意,SELECT中的'student'是一个字符串常量,将被插入到每一行中。

如果需要,您可以从/向同一个表选择和插入数据。

第15.4节:插入单行数据

单行数据可以通过两种方式插入:

sql 复制代码
INSERT INTO USERS(Id, FirstName, LastName) 
VALUES (1, 'Mike', 'Jones');

或

sql 复制代码
INSERT INTO USERS 
VALUES (1, 'Mike', 'Jones');

请注意,第二个insert语句只允许与表列完全相同的顺序的值,而在第一个insert中,值的顺序可以更改,例如:

sql 复制代码
INSERT INTO USERS(FirstName, LastName, Id) 
VALUES ('Mike', 'Jones', 1);

第15.5节:在特定列上插入

要在特定列(而不是所有列)上进行插入,您必须指定要更新的列。

sql 复制代码
INSERT INTO USERS (FIRST_NAME, LAST_NAME) 
VALUES ('Stephen', 'Jiang');

这只有在您未列出的列可为空、标识、时间戳数据类型或计算列时才有效;或者具有默认值约束的列。因此,如果其中任何列是非空的、非标识的、非时间戳的、非计算的、非默认值的列...则尝试这种插入将触发错误消息,告诉您必须为适用字段提供值。

第15.6节:将Hello World插入表

sql 复制代码
CREATE TABLE MyTableName (
    Id INT,
    MyColumnName NVARCHAR(1000)
)
GO

INSERT INTO MyTableName (Id, MyColumnName) 
VALUES (1, N'Hello World!')
GO
相关推荐
cao233320 小时前
关于 y0 y1 yn 变量名冲突说法的指正
笔记
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 24 章 生产实践与 2.x 迁移:陷阱清单、AOT 与调优
java·人工智能·开源
鶴哥只手遮天21 小时前
Spring AI 2.0.1 深度解析-第 10 章 工具调用(中):执行链路、结果转换与工具限制
java·人工智能·开源