@@@@@SQL Server中go的作用
在SQL Server Management Studio (SSMS) 或其他支持SQL Server的查询工具中,GO 不是一个SQL标准语句,而是SSMS环境中的一个批处理分隔符。GO 命令用于指示SSMS或其他工具将前面的SQL语句作为一个独立的批处理发送到SQL Server进行执行。
使用GO命令的主要原因有以下几点:
*批处理执行:GO可以将一系列SQL语句分割成多个批处理,每个批处理独立执行。这对于调试或按顺序执行多个独立的SQL任务很有用。
*错误隔离:如果一个批处理中的语句失败,后续的批处理仍将继续执行,除非你在脚本中显式地使用错误处理逻辑。
*事务边界:GO命令可以作为事务的边界。这意味着在GO之前开始的事务将在GO执行时提交或回滚,除非你显式地使用BEGIN TRANSACTION, COMMIT 或 ROLLBACK 语句。
*输出重置:每个GO命令之后,SSMS中的结果集窗口会被清空,为下一个批处理的输出做准备。
@@@@@IDENTITY的作用及用法
IDENTITY
属性在SQL Server中主要用于自动产生一个序列化的、唯一的整数值,通常用作表的主键,以确保每一行数据的唯一性。这个属性特别适用于那些需要自动生成唯一标识符的场景,例如用户ID、订单号等。
*** 作用
- 自动增长:当向表中插入新行但未明确指定该列的值时,
IDENTITY
列会自动填充下一个可用的序列值。 - 唯一性:保证每个生成的值都是唯一的,避免了主键冲突的问题。
- 连续性:除非发生回滚或事务失败,否则
IDENTITY
值是连续的,这有助于跟踪记录的插入顺序。
*** 语法和用法
IDENTITY
属性可以这样定义在一个列上:
[列名] [数据类型] IDENTITY([种子], [增量])
- [列名]:指定要应用
IDENTITY
属性的列的名称。 - [数据类型]:必须是整数类型,如
INT
、BIGINT
、SMALLINT
或TINYINT
。 - [种子]:序列的起始值。默认为
1
。 - [增量]:每次新行插入时增加的值。默认为
1
。
例如:
CREATE TABLE Orders (
OrderID INT IDENTITY(1,1) PRIMARY KEY,
CustomerID INT,
OrderDate DATE
);
在这个例子中,OrderID
列将自动以1为起始值,每次插入新行时递增1。即使删除了某些行,OrderID
也会继续从最后一个分配的值开始递增,保持连续性。
*** 注意事项
- 一旦定义了
IDENTITY
属性,就不能在现有的表中直接添加具有IDENTITY
属性的列,需要先创建一个新的表,然后通过数据迁移等方式将旧表的数据转移到新表中。 IDENTITY
值一旦生成,就无法修改或重新生成,只能通过删除并重新插入来重置序列。- 在事务处理中,如果事务回滚,已生成但未提交的
IDENTITY
值不会被回收,因此可能造成序列不连续。
@@@@@可以使用学号做主键的情况下,为什么还要选择用uniqueidentifier数据行标识符做主键
确实,学号
作为自增的整数字段,已经能够很好地担当主键的角色,为每一条记录提供一个唯一的标识。但是,在某些情况下,添加额外的数据行标志符
(通常是uniqueidentifier
类型)有其特定的优势和用途,主要体现在以下几个方面:
- 跨系统引用的一致性:
- 当数据需要在不同的系统或数据库之间交换时,使用
uniqueidentifier
可以确保每个记录有一个全球范围内唯一的标识符。这是因为int
类型的学号
可能在不同系统中重复(例如,假设我们有两个来自不同高校的学生,他们都有学号123456:
学生A来自高校X,他的参赛记录可能是这样的:
学号: 123456
姓名: 张三
高校: X大学
数据行标志符: 123e4567-e89b-12d3-a456-426614174000
学生B来自高校Y,他的参赛记录可能是这样的:
学号: 123456
姓名: 李四
高校: Y大学
数据行标志符: 546f630c-845b-480e-b8ef-f3b9c7cf0bb8
在这个例子中,尽管张三和李四有相同的学号,但他们的数据行标志符完全不同,确保了每条记录的唯一性,便于数据的准确管理和分析。),而uniqueidentifier
几乎不可能发生冲突。
- 当数据需要在不同的系统或数据库之间交换时,使用
- 数据备份与恢复:
- 在数据备份与恢复操作中,
uniqueidentifier
有助于确保从备份中恢复的数据行可以正确地与现有数据集中的其他行区分开来,避免了因主键冲突而导致的恢复失败问题。
- 在数据备份与恢复操作中,
- 数据复制与合并:
- 在数据复制或合并场景下,
uniqueidentifier
可以作为辅助键,确保即便是在不同数据库或系统中具有相同学号
的数据行也能被正确识别和处理,避免数据冲突或重复。
- 在数据复制或合并场景下,
- 并发控制:
- 在高并发环境下,使用
uniqueidentifier
作为辅助标识符可以减少锁竞争,因为它们是独立生成的,不会像自增主键那样在高并发插入时导致锁等待。
- 在高并发环境下,使用
- 灵活性与可扩展性:
- 使用
uniqueidentifier
增加了系统的灵活性和可扩展性,比如在需要重新排序或重置学号
时,不会影响到数据行的唯一标识。
然而,uniqueidentifier
也有其缺点,比如占用空间较大(通常16字节)、性能开销(生成和索引)以及在某些场景下可能不如整数主键直观。因此,是否使用数据行标志符
作为辅助唯一标识符,取决于具体的应用需求、数据规模和性能要求。在大多数简单场景下,仅使用学号
作为主键可能就足够了;但在需要更高级别数据一致性和跨系统兼容性的复杂系统中,数据行标志符
提供了额外的价值。
- 使用
@@@@@为什么有些时候操作 会需要在表名前面加dbo.
在SQL Server中,dbo
是一个特殊的schema(模式),它是数据库拥有的默认schema。当一个数据库被创建时,dbo
schema自动存在,并且任何未指定schema的数据库对象(如表、视图、存储过程等)都将默认放置在dbo
schema下。dbo
是database owner(数据库拥有者)的缩写,通常与创建数据库的用户(通常是sa
账号)相关联。
在SQL Server中,你可能需要在表名前加上dbo.
的情况有以下几种:
- 多用户环境:
- 当有多个用户或应用程序同时访问同一个数据库时,使用
dbo.
前缀可以帮助明确指出要操作的是dbo
schema下的特定对象,避免与其他schema下的同名对象混淆。
- 当有多个用户或应用程序同时访问同一个数据库时,使用
- 跨schema引用:
- 如果数据库中有多个schema,且需要从一个schema引用另一个schema的对象时,使用schema前缀是必要的,如
schema_name.object_name
。
- 如果数据库中有多个schema,且需要从一个schema引用另一个schema的对象时,使用schema前缀是必要的,如
- 权限和所有权:
- 如果你需要访问的对象不在当前默认schema下,或者你没有对当前默认schema下对象的权限,使用
dbo.
前缀可以确保你有足够的权限访问该对象。
- 如果你需要访问的对象不在当前默认schema下,或者你没有对当前默认schema下对象的权限,使用
- 明确性:
- 即使在一个简单的单用户环境中,使用
dbo.
前缀也可以增加查询的可读性和明确性,特别是在数据库设计中包含了多个schema的情况下。
- 即使在一个简单的单用户环境中,使用
- 跨服务器查询:
- 当进行跨服务器查询时,你可能需要使用完整的对象路径,包括服务器名、数据库名、schema名和对象名,如
ServerName.DatabaseName.dbo.TableName
。
- 当进行跨服务器查询时,你可能需要使用完整的对象路径,包括服务器名、数据库名、schema名和对象名,如
- 避免名称冲突:
- 如果你在一个schema中创建了一个与
dbo
schema下对象同名的新对象,那么在引用dbo
schema下的对象时,就需要显式使用dbo.
前缀,否则SQL Server将引用你当前schema下的对象。
在SQL Server Management Studio或其他SQL客户端中,如果你没有显式指定schema,而直接使用表名,SQL Server会默认查找dbo
schema下的表。然而,如果你的连接默认schema不是dbo
,或者有其他同名对象存在于不同的schema中,那么使用dbo.
前缀就是必须的。
- 如果你在一个schema中创建了一个与
@@@@@ALTER TABLE [dbo].[货物明细] ADD CONSTRAINT [DF_货物明细_货物规格] DEFAULT (N'只') FOR[货物规格]:为什么是(N'只')
在SQL Server中,当你定义默认约束时,如果默认值是字符串类型,需要使用前缀 N
来声明这是一个Unicode字符串。这是因为SQL Server支持两种字符串数据类型:char
, varchar
, text
等用于非Unicode字符集,而 nchar
, nvarchar
, ntext
等用于Unicode字符集。
在示例中,[货物规格]
字段被定义为 [NCHAR](2)
,这是一个Unicode数据类型。因此,当你设置默认值 '只'
时,为了确保字符串是以Unicode格式存储的,你需要在单引号前加上 N
,即 N'只'
。这样,SQL Server就知道 '只'
应该作为Unicode字符处理。
如果字段被定义为非Unicode类型(例如 char
或 varchar
),那么你只需使用普通的单引号包裹默认字符串值,如 '只'
即可。
@@@@@ALTER TABLE [dbo].[货物明细] ADD CONSTRAINT [DF_货物明细_货物规格] DEFAULT (N'只') FOR[货物规格]:这个DF_是什么意思,怎么用
在SQL Server中,DF_
前缀通常用于标识默认约束(Default Constraint)。在示例代码中,DF_货物明细_货物规格
和 DF_货物明细_数据行标志符
都是默认约束的名称。这些约束用于设定当插入新行时,如果没有明确提供某个字段的值,那么应该使用什么默认值。
*** 默认约束的作用:
- 确保即使在没有明确提供值的情况下,列也能获得一个合理的值。
- 可以避免因未提供值而导致的空值或NULL值问题。
*** 如何创建默认约束:
-- 创建表时添加默认约束
CREATE TABLE MyTable (
ColumnName DataType DEFAULT defaultValue,
...
);
-- 或者在表创建之后添加默认约束
ALTER TABLE MyTable
ADD CONSTRAINT DF_MyTable_ColumnName
DEFAULT defaultValue FOR ColumnName;
在示例中:
DF_货物明细_货物规格
设置了货物规格
列的默认值为N'只'
。这意味着如果在插入新行时不指定货物规格
的值,系统将自动使用N'只'
。DF_货物明细_数据行标志符
设置了数据行标志符
列的默认值为NEWID()
函数的返回值。NEWID()
是一个返回唯一标识符(uniqueidentifier
类型)的函数。这意味着如果在插入新行时不指定数据行标志符
的值,系统将自动为该列生成一个新的唯一标识符。
*** 使用默认约束的注意事项:- 默认约束只能应用于非聚集索引列、非标识列、非计算列和非稀疏列。
- 如果在表中插入数据时显式提供了某列的值,则默认约束将被忽略,使用提供的值而不是默认值。
- 默认约束可以使用
ALTER TABLE
语句添加、查看或删除。
通过使用默认约束,你可以确保数据的一致性和完整性,同时减少插入数据时的输入负担。
@@@@@如何定义约束,如何查看约束条件
在 SQL Server 中,你通常会使用 ALTER TABLE
语句配合 ADD CONSTRAINT
来实现这一目的。约束可以是主键(PRIMARY KEY)、唯一键(UNIQUE)、外键(FOREIGN KEY)、检查约束(CHECK)或默认约束(DEFAULT)
- 添加主键约束:
ALTER TABLE YourTable
ADD CONSTRAINT PK_YourTable PRIMARY KEY (YourColumn);
- 添加唯一约束:
ALTER TABLE YourTable
ADD CONSTRAINT UQ_YourTable UNIQUE (YourColumn);
- 添加外键约束:
ALTER TABLE YourTable
ADD CONSTRAINT FK_YourTable_OtherTable FOREIGN KEY (YourColumn) REFERENCES OtherTable (OtherColumn);
- 添加检查约束:
ALTER TABLE YourTable
ADD CONSTRAINT CHK_YourTable CHECK (YourColumn > 0);
- 添加默认约束:
ALTER TABLE YourTable
ADD CONSTRAINT DF_YourTable DEFAULT 'DefaultValue' FOR YourColumn;
当你向现有表添加约束时,SQL Server 会检查现有的数据是否符合新约束的要求。如果数据不符合约束条件,操作将会失败。因此,在添加约束之前,你可能需要先清理数据或调整约束条件以匹配现有数据。
在SQL Server中,EXEC
(或EXECUTE
)关键字通常用于执行存储过程。当你想要查看一个表的约束时,SQL Server提供了系统存储过程sp_help
和sp_helpconstraint
,它们可以用来获取有关数据库对象的详细信息,包括表的约束信息。
使用EXEC
调用这些存储过程是因为它们本质上是预先定义好的数据库对象,它们封装了一组SQL指令,用于执行特定的任务,比如查询表的约束信息。通过EXEC
来调用存储过程,可以传递参数给存储过程,并执行其中的代码,从而返回所需的信息。
例如,要查看名为MyTable
的表的约束,你可以使用以下命令:
EXEC sp_helpconstraint 'MyTable';
或者
EXEC sp_help 'MyTable';
sp_helpconstraint
专门用于显示表上的约束信息,包括主键、外键、唯一约束、检查约束和默认约束。而sp_help
则提供了更多关于表的信息,包括列定义、索引、规则、默认值、约束等。
@@@@@有哪些方法查看一个表的列信息
了解,针对SQL Server数据库,如果你想查看一个表的列信息,可以使用以下SQL查询方法:
- 使用
INFORMATION_SCHEMA.COLUMNS
:
这个方法可以从系统目录视图中检索表的列信息。SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'YourTableName';
- 使用
sys.columns
和sys.tables
:
这是另一种从系统目录视图中获取列信息的方法,更适用于SQL Server 2005及更高版本。SELECT c.name AS ColumnName FROM sys.columns c JOIN sys.tables t ON c.object_id = t.object_id WHERE t.name = N'YourTableName';
- 使用
sp_columns
存储过程:
这是一个系统存储过程,可以用来显示指定表的所有列的信息。
EXEC sp_columns @table_name=N'YourTableName';
如果你在查询时遇到权限问题,确保你有足够的权限访问相关的系统目录视图或执行系统存储过程。在SQL Server中,这些方法是最常用的获取表结构信息的方式。
@@@@@EXEC sp_columns YourTableName不就可以了,为什么要@table_name...
EXEC sp_columns YourTableName
实际上是一个简化版的调用方式,它在很多情况下确实能够直接工作。不过,这个命令在SQL Server中可能需要稍作修改,因为它期望一个确切的参数类型,即@table_name
应该是一个nvarchar(128)
类型的变量。为了确保命令正确执行,通常会以这样的形式给出:
EXEC sp_columns @table_name=N'YourTableName';
这里的N
前缀表示字符串是Unicode编码的,这是SQL Server推荐的做法,尤其是在处理可能包含非英文字符的表名时。
简化后的版本EXEC sp_columns YourTableName
在某些环境下也能运行,这是因为SQL Server会尝试隐式地转换YourTableName
为正确的参数类型。然而,这种做法并不总是建议的,因为:
- 它可能在某些SQL Server版本或配置中不起作用,特别是如果启用了严格模式或参数化查询优化。
- 使用明确的参数可以提高代码的可读性和维护性,使得意图更加清晰。
- 它遵循了SQL Server存储过程调用的最佳实践,有助于避免潜在的错误和性能问题。
因此,虽然EXEC sp_columns YourTableName
在某些简单情况下可能工作,但在生产环境或复杂的数据库脚本中,推荐使用更规范的语法,这样可以确保你的代码在各种SQL Server环境中都能稳定运行,并且遵循了良好的编程习惯。
@@@@@什么是视图,有什么作用
在数据库领域,视图(View)是一种虚拟表,它并不实际存储数据,而是由一个SQL查询语句定义,该查询从一个或多个实际的表(称为基表)中检索数据。视图可以看作是一个存储的查询,它提供了另一种观察数据的方式,而无需改变数据的物理存储。
视图的作用主要包括以下几点:
- 简化复杂查询:
视图可以封装复杂的查询逻辑,使用户不必每次都编写相同的复杂SQL语句。用户只需要引用视图,就能获得所需的数据。 - 数据抽象与隐藏:
视图可以隐藏基表的结构和复杂性,向用户提供一个更简洁、更易于理解的数据视图。这有助于保持数据的逻辑独立性,即使基表结构发生变化,也不影响使用视图的用户。 - 安全控制:
数据库管理员可以使用视图来限制用户对敏感数据的访问。通过创建特定的视图,可以确保用户只能看到他们被授权查看的数据部分,而看不到整个表的内容。 - 数据聚合:
视图可以结合多个表的数据,提供汇总或分析视图,这在报表生成和数据分析中非常有用。 - 增强数据一致性:
通过视图可以强制实施数据完整性规则,例如,可以创建只允许插入特定值的视图。 - 性能提升:
某些类型的视图,如索引视图,可以改善查询性能,因为它们可以被优化器用作数据源,从而减少实时数据检索的需求。 - 跨数据库查询:
视图可以跨越多个数据库,甚至多个数据库服务器,提供统一的数据访问接口。 - 逻辑独立性:
当数据库结构发生变化时,如果通过视图访问数据,可以减少对应用程序的影响,因为应用程序只需要引用视图,而不需要知道基表的实际结构。
总之,视图提供了一种灵活的方式来管理和展示数据,增加了数据的安全性、简化了查询,并提高了数据的可管理性和可访问性。
@@@@@可以这么理解吗,视图就是把复杂操作保存下来,方便后续调用
这样的理解更接近于视图的本质。在数据库中,视图确实可以被看作是保存了复杂查询操作的一种方式,尤其是涉及多表连接的查询。当你创建一个视图时,实际上是保存了一个预定义的SELECT语句,这个语句可能包含多表联接、筛选条件、聚合函数等复杂操作。
当你以后查询这个视图时,数据库就会执行视图中保存的SQL语句,并返回最新的结果。这相当于每次查询都重新执行了那个复杂的操作,但因为这个操作已经被封装在视图里,所以对于用户来说,查询视图就像查询一个普通的表一样简单。
这样做的好处是:
- 简化了查询:用户不必每次都记住并编写复杂的SQL语句。
- 提高安全性:可以通过视图来限制对底层数据的访问,比如隐藏某些字段或只显示特定的行。
- 维护数据一致性:如果业务需求变更,只需要修改视图的定义,而不必修改所有依赖这个查询的应用程序代码。
因此,说视图是“把复杂操作保存下来”,是一个恰当且直观的描述。
@@@@@如何使用视图
使用视图在SQL中主要涉及以下几个步骤:创建视图、查询视图、更新视图(如果视图支持更新操作),以及删除视图。下面我将详细说明这些步骤:
*** 1. 创建视图
创建视图通常使用CREATE VIEW
语句。假设我们有一个员工表Employees
和一个部门表Departments
,我们想创建一个视图,用于显示每个员工及其所在部门的名称,可以使用以下SQL语句:
CREATE VIEW EmployeeWithDepartment AS
SELECT E.EmployeeID, E.FirstName, E.LastName, D.DepartmentName
FROM Employees E
JOIN Departments D ON E.DepartmentID = D.DepartmentID;
这将创建一个名为EmployeeWithDepartment
的视图。
*** 2. 查询视图
查询视图就像查询一个普通的表一样。例如,要查看EmployeeWithDepartment
视图中的所有记录,可以使用以下SQL语句:
SELECT * FROM EmployeeWithDepartment;
*** 3. 更新视图(如果支持)
并非所有的视图都可以更新,这取决于视图的定义和数据库的配置。如果视图定义允许,你可以通过视图来更新基表中的数据。例如:
UPDATE EmployeeWithDepartment
SET DepartmentName = 'New Department'
WHERE EmployeeID = 1;
请注意,更新视图可能需要满足一些条件,如视图不应包含聚合函数、GROUP BY子句或DISTINCT关键字等。
*** 4. 删除视图
如果不再需要某个视图,可以使用DROP VIEW
语句来删除它。例如:
DROP VIEW EmployeeWithDepartment;
这将永久删除EmployeeWithDepartment
视图,除非数据库有备份,否则数据不会恢复。
*** 注意事项
- 安全性:视图可以用来限制用户对敏感数据的访问,通过只显示特定列或特定行。
- 性能:某些类型的视图,如索引视图,可以提高查询性能。
- 权限:创建、查询和更新视图可能需要相应的数据库权限。
通过以上步骤,你可以有效地在SQL中创建、查询、更新和管理视图,以适应各种数据管理和访问需求。
@@@@@提示 错误的语法:"CREATEVIEW"必须是批处理中仅有的语句。
你在尝试创建视图时遇到的错误信息:“CREATEVIEW必须是批处理中仅有的语句。”通常意味着你在执行CREATE VIEW语句时,它与其他SQL语句混合在同一个批处理中,而没有被单独执行。在SQL Server中,CREATE VIEW语句需要在一个独立的批处理中执行,也就是说,在这个语句前后不应该有其他语句,除非它们是由分号;明确分隔开的。
@@@@@IDENTITY_INSERT的含义及用法
IDENTITY_INSERT
是 SQL Server 中的一个功能,主要用于控制带有 IDENTITY
属性的列(自动增长列)的行为。在默认情况下,当向包含 IDENTITY
列的表中插入新行时,SQL Server 会自动为该列生成下一个可用的唯一标识符,而无需用户指定具体的值。
但是,有时候可能需要手动设置 IDENTITY
列的值,比如在导入数据或者想要控制主键值的情况下。这时,IDENTITY_INSERT
就派上了用场。
*** 含义
IDENTITY_INSERT
是一个开关,它允许用户在插入数据时显式地设置 IDENTITY
列的值,而不是让 SQL Server 自动生成。
*** 用法
使用 IDENTITY_INSERT
需要遵循以下步骤:
- 开启
IDENTITY_INSERT
:在开始插入数据前,你需要先启用IDENTITY_INSERT
。这可以通过SET IDENTITY_INSERT <table_name> ON;
命令完成。 - 插入数据:接下来,你可以使用
INSERT
语句插入数据,同时指定IDENTITY
列的值。确保你提供的值是唯一的,并且遵循IDENTITY
列的生成规则。 - 关闭
IDENTITY_INSERT
:一旦完成插入,记得关闭IDENTITY_INSERT
,防止意外地在后续操作中继续使用显式设置。这可以通过SET IDENTITY_INSERT <table_name> OFF;
完成。
**** 示例
假设有一个名为Employees
的表,其中包含一个EmployeeID
列,该列具有IDENTITY(1,1)
属性(从1开始,每次递增1)。
-- 开启 IDENTITY_INSERT
SET IDENTITY_INSERT Employees ON;
-- 插入数据,显式设置 EmployeeID 的值
INSERT INTO Employees (EmployeeID, FirstName, LastName)
VALUES (101, 'John', 'Doe');
-- 关闭 IDENTITY_INSERT
SET IDENTITY_INSERT Employees OFF;
在这个例子中,即使 EmployeeID
是一个自动增长的列,我们也能够显式地将其值设置为 101
。如果 IDENTITY_INSERT
没有被开启,尝试这样插入数据会导致错误,因为 SQL Server 期望自己为 IDENTITY
列生成值。
注意:开启 IDENTITY_INSERT
可能会影响 IDENTITY
列的序列,因此应该谨慎使用,只在确实需要显式控制 IDENTITY
值时才开启。
@@@@@如果我想修改identity列,是否有identity_update?
实际上,在 SQL Server 中并没有 IDENTITY_UPDATE
这样的直接命令。IDENTITY_INSERT
允许你在插入新记录时显式地指定 IDENTITY
列的值,但是一旦记录已经被插入并且 IDENTITY
值已经生成,这个值就不能再通过简单地更新表来改变。
IDENTITY
列的值在插入时由数据库自动生成,其目的是为了保证唯一性和连续性。为了维护这些属性,SQL Server 不允许直接修改 IDENTITY
列的值,即不能使用 UPDATE
语句来更改已存在的 IDENTITY
值。
如果你需要更改某一行的 IDENTITY
列值,通常的做法是删除该行,然后重新插入,同时使用 IDENTITY_INSERT
来指定新的 IDENTITY
值。但这需要非常小心地处理,以避免破坏 IDENTITY
序列的连续性或引入重复的值。
然而,如果你只是想重置 IDENTITY
列的种子和增量,可以使用 DBCC CHECKIDENT
命令来实现。例如:
DBCC CHECKIDENT ('YourTable', RESEED, 0);
这条命令会将 YourTable
表中的 IDENTITY
列的种子重置为0,下一次插入时将从1开始计数。你可以将最后一个参数设置为你想要的任何值来重置种子。
总结来说,IDENTITY_UPDATE
并不是一个 SQL Server 支持的命令,对于 IDENTITY
列的管理主要集中在插入行为以及对整个序列的重置上。