一、自增
-- 查詢種子值:
dbcc checkident(表名,noreseed)
--重設(shè)置種子值為2:
dbcc checkident(表名,reseed,2)
二、重命名系列:
sp_renamedb
sp_rename employees,Empinfo重命名表名。
sp_rename 'Employees.Wage','salary','column' 將表employees中的列wage,重命名為salary。
三、修改表結(jié)構(gòu)
--向表中添加列:
alter table 表名 add 列名 類型 列屬性
alter table employees add tele varchar(50) null
--修改列屬性:
alter table 表名 alter column 列名 新數(shù)據(jù)類型和長(zhǎng)度 新列屬性
如:
alter table employees alter column tele char(30) null
--刪除表中的列
alter table employees drop column tele
四、索引與約束
--修改主鍵約束:
alter table xxx add constraint pk_xxx primary key nonclustered (xxx)
alter table xxx drop constraint pk_xxx
alter table constraint xxx unique (xxx)
alter table xxx add constraint xxx check(sex='男' or sex='女')
alter table Employees add constraint de_title default '職員' for title
--刪除約束
alter table xxx drop constraint ck_sex
go
--從sys.key_constraints獲取約束信息
select * from sys.key_constrains
--從information_schema.check_constraints獲取檢查約束信息
select * from information_schema.check_constraints
--從sys.foreign_keys獲取表中的外鍵約束:
--創(chuàng)建唯一索引
create unique nonclustered index
--修改索引:
alter index {索引名|all} on <xxx.> {rebuild|disable|reorganize}
--從系統(tǒng)視圖sys.indexes查詢索引信息
use hrsystem
go
select * from sys.indexes
go
sp_helpindex 'Tablename';
go
--查看索引
select * from sys.index_columns
go
--從sys.dm_db_index_usage_stats中查詢索引操作的信息:
use xxx
select * from sys.dm_db_index_usage_stats
各種重組索引的方式
--不指定參數(shù)重組索引:
ALTER INDEX [idx_refno] ON [ordDemo] REORGANIZE
GO
--重組表中所有索引:
ALTER INDEX ALL ON [ordDemo] REORGANIZE
GO
--使用DBCC INDEXDEFRAG重建表上所有索引:
DBCC INDEXDEFRAG('AdventureWorks','ordDemo')
GO
--使用DBCC INDEXDEFRAG重組表上一個(gè)索引:
DBCC INDEXDEFRAG('AdventureWorks','ordDemo','idx_refno')
GO
--重新生成索引:
alter index ix_wage on employees rebuild WITH (ONLINE = ON);
DBCC DBREINDEX
--禁用索引:
alter index ix_wage on employees disable;
使用sys.dm_db_index_physical_stats函數(shù)檢測(cè)指定索引的碎片情況:
use hrsystem
select * from sys.dm_db_index_physical_stats(DB_ID(),object_id(N'Credit.consume'),NULL,NULL,NULL)
--檢測(cè)數(shù)據(jù)庫hrsystem中表employees的所有索引的碎片情況:
use hrsystem
go
select a.index_id,name,avg_fragmentation_in_percent
from sys.dm_db_index_physical_stats(DB_ID(),OBJECT_ID(N'Credit.Consume'),
NULL,NULL,NULL) as a
join sys.indexes as b On a.object_id=b.object_id and a.index_id=b.index_id;
go
DBCC INDEXDEFRAG
--查看表索引信息和統(tǒng)計(jì)信息
DECLARE @tblnvarchar(265)
SELECT @tbl = '表名'
SELECT o.name,i.index_id, i.name, i.type_desc,
substring(ikey.cols, 3, len(ikey.cols))AS key_cols,
substring(inc.cols, 3, len(inc.cols)) ASincluded_cols,
stats_date(o.object_id, i.index_id) ASstats_date,
i.filter_definition
FROM sys.objects o
JOIN sys.indexes i ON i.object_id = o.object_id
CROSS APPLY (SELECT ', ' + c.name +
CASE ic.is_descending_key
WHEN 1 THEN ' DESC'
ELSE ''
END
FROM sys.index_columns ic
JOIN sys.columns c ON ic.object_id = c.object_id
ANDic.column_id = c.column_id
WHERE ic.object_id = i.object_id
AND ic.index_id = i.index_id
AND ic.is_included_column = 0
ORDER BY ic.key_ordinal
FOR XML PATH('')) AS ikey(cols)
OUTER APPLY (SELECT ', ' + c.name
FROM sys.index_columns ic
JOIN sys.columns c ON ic.object_id = c.object_id
ANDic.column_id = c.column_id
WHERE ic.object_id = i.object_id
AND ic.index_id = i.index_id
AND ic.is_included_column = 1
ORDER BY ic.index_column_id
FOR XML PATH('')) AS inc(cols)
WHERE o.name = @tbl
AND i.type IN (1, 2)
ORDER BY o.name, i.index_id
--查看某一對(duì)象的統(tǒng)計(jì)信息
dbcc show_statistics(ac_application表名,p_application統(tǒng)計(jì)信息名)
五、統(tǒng)計(jì)信息
--使用sys.stats查看統(tǒng)計(jì)信息:
select o.name,s.name,auto_created,user_created from sys.stats s inner join sysobjects o
on s.object_id=o.id
where o.name='Employees'
go
-查看對(duì)象統(tǒng)計(jì)信息
select * from sales.SalesOrderDetail where UnitPrice = 35
dbcc show_statistics('sales.salesorderdetail',unitprice)
go
--查看對(duì)象統(tǒng)計(jì)信息更新情況
--使用sys.stats_columns查看統(tǒng)計(jì)信息中列的信息
select * from sys.stats
go
select * from sys.stats_columns
go
select object_id,stats_id
from sys.stats
where OBJECT_ID = OBJECT_ID('sales.salesorderdetail')
and name = 'Pk_salesorderdetail_slaesorderid_salesorderdetailid'
--查詢統(tǒng)計(jì)信息時(shí)間
select stats_date(1154103142,1)
select name,auto_created,STATS_DATE(object_id,stats_id) as update_date
from sys.stats
where object_id = OBject_id('sales.salesorderdetail')
--更新統(tǒng)計(jì)信息
exec sp_updatestats
--刪除統(tǒng)計(jì)信息
drop statistics <表名>.<統(tǒng)計(jì)信息名>|
--使用dbcc show_statistics命令查看統(tǒng)計(jì)信息的明細(xì)信息
dbcc show_statistics('Employees',IX_Wage)
--使用sp_autostats存儲(chǔ)過程查看索引自動(dòng)創(chuàng)建的統(tǒng)計(jì)信息:
use hrsystem
go
exec sp_autostats 'Employees'
gp
--創(chuàng)建統(tǒng)計(jì)信息
alter database hrsystem set auto_create_statistics off
create statistics xxx on employees(idcard)
--設(shè)置統(tǒng)計(jì)信息隨機(jī)抽樣為5%
create statistics ix_title on employees(title)
with sample 5 percent
go
--使用sp_createstats存儲(chǔ)過程創(chuàng)建統(tǒng)計(jì)信息(可以為當(dāng)前數(shù)據(jù)庫所有表的合格列和內(nèi)部表創(chuàng)建單列的統(tǒng)計(jì)信息)
exec sp_createstats;
-修改統(tǒng)計(jì)信息:
--更新指定表的所有統(tǒng)計(jì)信息
use hrsystem
update statistics employees
go
--更新指定表的單個(gè)索引的統(tǒng)計(jì)信息:
use hrsystem
go
update statistics employees pk_employees
--對(duì)全表進(jìn)行掃描,更新統(tǒng)計(jì)信息
use hrsystem
go
update statistics employees(ix_wage) with fullscan
go
--刪除統(tǒng)計(jì)信息
其它統(tǒng)計(jì)信息相關(guān)腳本:
六、其它對(duì)象
--查詢系統(tǒng)視圖sys.objects和sys.columns中的id值。
select * from sys.columns where object_id=2105058535 and column_id=7
use adventureworks2014
select * from sys.objects where name = 'Employee'
--從系統(tǒng)表sys.objects中獲取所有數(shù)據(jù)庫對(duì)象的信息:
select * from sys.objects where type='pk'
--將sys.indexes與sys.objects相關(guān)聯(lián)
select o.name as 表名,i.name as 索引名,i.type_desc as 類型描述,
is_primary_key as 主鍵約束,is_unique_constraint as 唯一約束,is_disabled as 禁用 from sys.objects o inner join sys.indexes i on i.object_id=o.object_id
use master;
select name from sys.objects where type_desc='system_table';
select * from sys.objects;
select * from sys.objects where name='employee' --得到該表的objectID
select * from sys.partitions where object_id = '1237579447'
--得到該表的所有partition
select * from sys.allocation_units where container_id = 72057594050641920
--進(jìn)一步根據(jù)hobt_id查詢某一partition信息
select * from sys.system_internals_allocation_units where container_id = 72057594050641920
--查詢進(jìn)一步信息
select * from sys.databases;
select * from sysdatabases;
select OBJECT_DEFINITION (object_id('sys.tables'));