在上面语法中, seed 是表中的第一行的值(第一条记录标识列使用的值)。
increment 是添加到上一行标识值的增量值。
seed 和 increment 的默认值是 1 ,即 (1,1) 。
表示加载到表中的第一行的值为: 1 ,第二行的值为: 2 (在上一行: 1 的基础上加 1 ),依此类推。 假设,希望第一行的标识列的值为 10 ,增量值为 2 ,可使用以下语法:
IDENTITY (10,2)
SQL Server允许每个表只有一个标识列。
创建一个名为 hr 的新模式用来练习:
CREATE SCHEMA hr;
以下语句在个人标识号( person_id )列上使用 IDENTITY 属性创建新表:
CREATE TABLE hr.person (
person_id INT IDENTITY(1,1) PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
gender CHAR(1) NOT NULL
);
重用标识值
SQL Server不能重用标识值。
如果在标识列中插入行并且执行 insert 语句失败或回滚,则标识值将丢 失,并且不会再次生成。 这会导致标识列中出现空白。
方法一:
使用Truncate TRUNCATE TABLE name 可以删除表内所有值并重置标识值 ,但是表内的数据将丢失
方法二:
你想要重置标识值(不删除数据)采用下面方法即可:
1. DBCC CHECKIDENT ('表名', RESEED, new_value)
(重置新的标识值,new_value为新值)
2. select IDENT_CURRENT('a') 当前表标识列的最大值
3. select @@IDENTITY 当前标识列的最大值
2. ALTER TABLE ADD 语句将一个或多个列添加到表中。
以下 ALTER TABLE ADD 语句将新列添加到表中:
ALTER TABLE table_name
ADD column_name data_type column_constraint;
在上面语句中: 首先,
table_name 指定要添加新列的表的名称。
其次, column_name 指定列的名称,
data_type 表示数据类型, column_constraint 表示约束(如果 适用)。 如果要使用单个 ALTER TABLE 语句一次向表中添加多个列,请使用以下语法:
ALTER TABLE table_name
ADD
column_name_1 data_type_1 column_constraint_1,
column_name_2 data_type_2 column_constraint_2,
...,
column_name_n data_type_n column_constraint_n;
在此语法中,指定要在 ADD 子句之后添加到表中,
以逗号分隔的列列表。 SQL Server ALTER TABLE ADD列示例 以下语句创建一个名为 sales.quotations 的新表:
CREATE TABLE sales.quotations (
quotation_no INT IDENTITY PRIMARY KEY,
valid_from DATE NOT NULL,
valid_to DATE NOT NULL
);
要将名为 description 的新列添加到 sales.quotations 表,请使用以下语句:
ALTER TABLE sales.quotations
ADD description VARCHAR (255) NOT NULL;
以下语句将两个名为 amount 和 customer_name 的新列添加到 sales.quotations 表中:
ALTER TABLE sales.quotations
ADD
amount DECIMAL (10, 2) NOT NULL,
customer_name VARCHAR (50) NOT NULL;
2.SQL Server修改表的列
修改列的数据类型
要修改列的数据类型,请使用以下语句:
ALTER TABLE table_name
ALTER COLUMN column_name new_data_type(size);
新数据类型必须与旧数据类型兼容,否则,如果列具有数据且无法转换,则会出现转换错误。 请看下面示例。
首先,创建一个包含只有一列数据类型为 INT 的新表:
CREATE TABLE t1 (c INT);
其次,在表中插入一些行:
INSERT INTO t1
VALUES
(1),
(2),
(3);
接下来,将列的数据类型从 INT 修改为 VARCHAR :
ALTER TABLE t1 ALTER COLUMN c VARCHAR (2);
第三,插入带有字符串数据的新行:
INSERT INTO t1
VALUES
('@');
第四,将列的数据类型从 VARCHAR 修改回 INT :
ALTER TABLE t1 ALTER COLUMN c INT;
SQL Server发出以下错误:
Conversion failed when converting the varchar value '@' to data type int.
更改列的大小 以下语句创建一个新表,其中一列的数据类型为 VARCHAR(10) :
CREATE TABLE t2 (c VARCHAR(25));
将一些示例数据插入到 t2 表中:
INSERT INTO t2
VALUES
('SQL Server'),
('Yiibai.com'),
('Kaops.com')
可以按如下方式增加列的大小,修改为: 50 :
ALTER TABLE t2 ALTER COLUMN c VARCHAR (50);
但是,当减小列的大小时,
SQL Server会检查现有数据以查看它是否可以根据新大小转换数据。 如果转 换失败,
SQL Server将终止该语句并发出错误消息。 例如,如果将列 c 的大小减小为 5 个字符:
ALTER TABLE t2 ALTER COLUMN c VARCHAR (5);
SQL Server发出以下错误:
String or binary data would be truncated.
3. 向列添加NOT NULL约束
以下语句创建一个具有可为空列的新表:
CREATE TABLE t3 (c VARCHAR(50));
以下语句向表中插入一些行:
INSERT INTO t3
VALUES
('Nullable column'),
(NULL);
然后再添加 NOT NULL 约束:
ALTER TABLE t3 ALTER COLUMN c VARCHAR (20) NOT NULL;
4. 删除列
alter table 表名 drop column 列名
3.SQL Server删除表
DROP TABLE 语句从数据库中删除一个或多个表。
DROP TABLE [IF EXISTS] [database_name.][schema_name.]table_name;
在上面语法中,
首先, database_name 指定要删除的表的名称。
其次,指定创建表的数据库的名称以及表所属的模式的名称。
数据库名称是可选的。
如果不指 定, DROP TABLE 语句将删除当前数据库中的表。
第三,使用 IF EXISTS 子句仅在表存在时才删除表。
自SQL Server 2016 13.x起,支持 IF EXISTS 子句。
如果删除不存在的表,则会出现错误。 如果表已经存在,则 IF EXISTS 子句有条 件地删除该表。 当SQL Server删除表时,它还会删除该表的所有数据,触发器,约束和权限。 此外,SQL Server不会显 式删除引用已删除表的视图和存储过程。
要显式删除这些对象,必须使用 DROP VIEW 和 DROP PROCEDURE 语句。 SQL Server允许使用单个 DROP TABLE 语句来一次删除多个表,如下所示:
DROP TABLE [database_name.][schema_name.]table_name_1,
[database_name.][schema_name.]table_name_2,
...
[database_name.][schema_name.]table_name_n;
SQL Server DROP TABLE示例 下面来看一些使用SQL Server DROP TABLE 语句的示例。
1. 删除不存在的表 以下语句删除 sales 模式中的 revenue 表:
DROP TABLE IF EXISTS sales.revenues;
2. 删除单个表示例 以下语句在 sales 模式中创建一个名为 delivery 的新表:
CREATE TABLE sales.delivery (
delivery_id INT PRIMARY KEY,
delivery_note VARCHAR (255) NOT NULL,
delivery_date DATE NOT NULL
);
3.删除具有外键约束的表
以下语句在 procurement 模式中创建两个新表: supplier_groups 和 supplier :
CREATE SCHEMA procurment;
GO
CREATE TABLE procurment.supplier_groups (
group_id INT IDENTITY PRIMARY KEY,
group_name VARCHAR (50) NOT NULL
);
CREATE TABLE procurment.suppliers (
supplier_id INT IDENTITY PRIMARY KEY,
supplier_name VARCHAR (50) NOT NULL,
group_id INT NOT NULL,
FOREIGN KEY (group_id) REFERENCES procurement.supplier_groups (group_id)
);