1.建立索引
create [UNIQUE or CLUSTERED or NONCLUSTERED] index index_name on table(column,...)
2.建立unique,clustered,nonclustered,primary key 約束
alter table tablename add
constraint constraint_name [unique or clustered or nonclustered or primary key] (conlumn,...)
注:primary key 約束,默認爲索引
3.建立Foreign key約束
alter table tablename (with nochek) add
constraint constraint_name foreign key(conlumn,...) references anothertable(conlumn,...)
anothertable(conlumn)爲參照的主鍵
4.建立check約束/default約束
alter table tablename add
constraint constraint_name Check(condition)
alter table tablename add
constraint constraint_name default 'default_value' for conlumn_name
5.刪除約束
sp_helpconstraint table_name 查看一個表中的約束情況
alter table table_name drop constraint constraint_name 刪除約束
6.刪除索引
sp_helpindex table_name 查看錶中索引情況
drop index table_name.index_name 刪除索引
7.恢復備份
restore database putonrecord from disk= 'f:/putonrecord(完全).dat' with norecovery
restore database putonrecord from disk= 'f:/putonrecord.dat' with recovery
restore database DBname from disk= 'c:/DBname.bak'
WITH recoverty,
MOVE 'OnSouth_Data' TO 'd:/DBname.mdf',
MOVE 'OnSouth_Log' TO 'e:/DBname.ldf'
RESTORE LOG MyNwind FROM MyNwindLog1 WITH NORECOVERY
RESTORE LOG MyNwind FROM MyNwindLog2 WITH RECOVERY, STOPAT = 'Apr 15, 1998 12:00 AM'
--追加備份的恢復方法
restore HEADERONLY from disk='c:/bak/bak.dat' --記錄一下position的值
restore database from disk='c:/bak/bak.dat' with file=Position的值
8.察看備份文件信息
restore FILELISTONLY from disk='f:/stat/stat'
restore HEADERONLY from disk='f:/stat/stat'
restore LABELONLY from disk='f:/stat/stat'
restore VERIFYONLY from disk='f:/stat/stat'
--驗證備份但不還原備份。檢查備份集是否完整以及所有卷是否都可讀。但是,RESTORE VERIFYONLY 不嘗試驗證備份卷中的數據結--構。如果備份有效,則返回"該備份集有效"。
9.導入/導出
BULK INSERT DB..TableName FROM 'd:/trvca.txt' with (fieldterminator='|',rowterminator='|/n')
--Output to XLS
exec master..xp_cmdshell 'bcp gtdjgl.dbo.gtdj out c:/a.xls -c -q -S"(local)" -U"sa" -P"sunny"'
--Output to XLS with queryout
exec master..xp_cmdshell 'bcp "select qymc from sydjgl.dbo.qydj" queryout c:/a.xls -c -q -S"(local)" -U"sa" -P"sunny"'
--Input from XLS
exec master..xp_cmdshell 'bcp gtdjgl.dbo.gtdj in c:/a.xls -c -q -S"(local)" -U"sa" -P"sunny"'
SELECT * into newtable
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:/xyz.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...sheetname$
--讀取txt文件
SELECT * FROM OPENROWSET('MICROSOFT.JET.OLEDB.4.0', 'Text;Database=E:/;' , 'SELECT * FROM aa#txt')
--將sql文件導入
osql -U 用戶名 -P 密碼 -i c:/**1.sql
10.查看索引情況
select table_Name=sysobjects.Name ,
index_Name=sysindexes.Name,
Type=sysobjects.type,
分配索引頁=sysindexes.reserved,
使用索引頁=sysindexes.used,
葉子層頁=sysindexes.Dpages,
非葉子層頁=sysindexes.used-sysindexes.Dpages,
rows=sysindexes.rowcnt
from sysindexes left outer join sysobjects on sysindexes.id=sysobjects.id
where sysindexes.indid>0 and sysindexes.indid<255 and sysindexes.status & 64=0
--若發現非葉子層的頁數爲負數,最好是運行DBCC UPDATEUSAGE ('dbname','tbname','ixname')來更新一下sysindexes的信息
注意indid列的取值
1 = 聚集索引
>1 = 非聚集
255 = 具有 text 或 image 數據的表條目
11.查看錶鎖情況
if object_id('tempdb..#lock')>0
drop table #lock
go
create table #lock(
spid int,
dbid int,
ObjId int,
IndID int,
Type varchar(10),
Resource varchar(100),
Mode varchar(10),
Status varchar(10)
)
insert into #lock exec sp_lock
select dbName=d.Name,ObjName=o.Name,l.* from master..sysdatabases D,#lock L,sysobjects O
where D.dbid=L.dbid and O.ID=L.ObjID
12.消除孤立用戶
exec sp_addlogin 'LoginUser'
use db
go
exec sp_grantdbaccess 'LoginUser','db_User' --在當前數據庫中添加帳戶(public)
use db
go
exec sp_revokedbaccess 'LoginUser' --從數據庫中刪除帳戶
use db
go
exec sp_grantdbaccess 'LoginUser' --重新爲數據庫添加賬號
或者
use db
go
sp_change_users_login 'Report' --顯示存在孤立用戶的數據庫帳號
sp_change_users_login 'Auto_Fix','sameName' --將數據庫帳號='sameName'與登陸帳號='sameName'的建立連接
sp_change_users_login 'Update_One', 'dbUser', 'LoginUser' --將db數據庫帳號dbUser與登陸帳號LoginUser建立連接
或者
用dts來導入帳號信息:
[在源數據庫上新建一個包
然後將“傳輸登陸任務”從左邊工具欄的 拖到右邊框裏
在彈出的框中設置相應的登錄信息,最後運行包即可]
或者
bcp master..syslogins out localpath/syslogins.dat /N /S current_primary_servername /U sa /P sa_password
EXEC xp_cmdshell 'copy localpath/syslogins.dat destination_share'
EXEC sp_resolve_logins
@dest_db = 'dbname',
@dest_path = 'destination_path',
@filename = 'filename'
GO
注意:使用dts或sp_resolve_logins最後還都是要作一遍sp_change_user_login才能將登陸帳號與db帳號連接起來
可以用sp_helpuser來察看數據庫賬號情況
可以用sp_helplogins來查看登陸賬號情況
13.添加帳號
exec sp_addlogin 'sys_accounts','pass','default db'
use db
go
exec sp_grantdbaccess 'sys_accounts','db_accounts' --添加到當前數據庫下
sp_addrolemember 'db_owner','db_accounts' --調整數據庫登陸角色爲db_owner
或者
(1).exec sp_addlogin 'sys_accounts','pass','default db' --sp_droplogin 爲刪除登陸帳號
(2).sp_addsrvrolemember 'sys_accounts',sysadmin --調整系統登陸角色爲administrator
--更改默認數據庫
sp_defaultdb 'sa','newdb'
14.更改數據所有者
use db
go
sp_changedbowner 'newLogin' --將db庫dbo默認的系統登陸帳號(sa)更改爲新系統登陸帳號newLogin,也就是說newlogin賬號有了db數據庫的db_owner權限
--說得再白一些,newLogin登陸賬號,將擁有db數據庫的db_owner權限,但他卻不需要在db中添加新的數據庫賬號(也就是
--說在db數據庫中沒有newLogin這個帳號,而是將dbo帳號與newLogin系統帳號連接起來了)
--因爲,它直接利用dbo這個數據庫賬號。
use db
go
exec sp_changeobjectowner 'gsscowner.sp_tjbm_sci','dbo' --更改表、存儲、試圖對象的所有者,'dbo'處可以使用其他的數據庫賬號,但非系統賬號
15.分佈連接
SELECT * FROM Opendatasource('SQLOLEDB','Data Source=ServerName;User ID=MyUID;Password=MyPass').Northwind.dbo.Categories
16.查詢表使用情況
EXEC sp_MSforeachtable @command1='sp_spaceused ''?''',@command2='sp_mstablespace ''?'''
17.測試T-SQL的執行效率
dbcc DropCleanBuffers --清除緩衝區
dbcc FreeProcCache --清除過程高速緩存
set statistics io on
select count(*) from one --報告查詢中包含的每個表所進行的I/O活動信息,包含掃描的行數和讀取的次數。
set statistics io off
set statistics time on
select count(*) from one --報告關於CPU和查詢的全部執行時間及其查詢結果而運行的其他系統過程(如:編譯和存儲查詢的過程)的信息
set statistics time off
set showplan_all on
go
select count(*) from one --以文本的形式報告查詢執行的詳細計劃
go
set showplan_all off
18.整理索引
dbcc showcontig(tbName,ixName) --with ALL_INDEXES
- 掃描頁數.....................................: 3 --總的分頁數目
- 掃描擴展盤區數...............................: 2 --一個擴展分區相當於8個連續的分頁
- 擴展盤區開關數...............................: 1 --當dbcc順着分頁指針瀏覽整個結構時,擴展分區間切換了的次數。說的白一點就是在 --掃描中一個頁與前一頁位於不同盤區的次數
- 每個擴展盤區上的平均頁數.....................: 1.5--用 擴展分區數(2)/掃描頁數(3) 得出的數據
- 掃描密度[最佳值:實際值]....................: 50.00%[1:2]--最佳值:3個分頁應該是在一個擴展分區中;實際值:擴展盤區更改的
--實際次數。2的由來實際是由盤區開關數+1得出的。
- 邏輯掃描碎片.................................: 0.00%--Out of order pages/掃描頁數(3) .
Out of order pages 含義:本來按照分頁的連續性,數據分佈的分頁應該是
緊緊挨着的,但由於數據的修改、刪除而整頁的搬移,造成了數據分佈的不連
續性,不連續的頁就是out of orders pages .
--在這裏沒有任何一個分頁不連續,因此爲0
- 擴展盤區掃描碎片.............................: 0.00%--與上面的意思基本一致,僅僅是將分頁換成了擴展分區
- 每頁上的平均可用字節數.......................: 246.7--代表每頁空下來未放數據的字節數(平均值)
- 平均頁密度(完整)...........................: 96.95%--代表分頁填滿的程度(平均值)
backup log logname to disk='D:/log/db.log'
alter database dbName set recovery simple /*set recovery bulk_logged*/set recovery full
dbcc DBReIndex ('db.owner.tbName','ixName','Fill Factor')
--DBCC INDEXDEFRAG (dbName, tbName, ixName)
alter database dbName set recovery full
backup database dbname to disk='D:/db/db.bak'
19.sp_server_info 用來察看數據庫系統狀態
20.alter database northwind set MULTI_USER /single_user --設置數據庫爲單用戶/多用戶訪問模式
sp_dboption 'pubs', 'single user' --判斷數據庫是單用戶還是多用戶
sp_helpdb --也可判斷
SELECT DATABASEPROPERTY('master',IsSingleUser)
21.alter database northwind ... WITH ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE
--...爲數據庫設置操作
--回滾未完成的事務
22.exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','10.50.80.11' --添加連接服務器
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','suntting'
sp_dropserver 'srv_lnk', 'droplogins'--刪除登陸信息
sp_helpserver
23.DBCC UPDATEUSAGE/sp_refreshview/sp_recompile/sp_spaceused objectName,true/false
DBCC UPDATEUSAGE --報告和更正 sysindexes 表的不正確內容,可能會導致 sp_spaceused 產生不正確的空間使用報表。
sp_refreshview --解決重建視圖的問題,還可以通過重建,發現系統中視圖的語法錯誤。
sp_recompile --使存儲過程和觸發器在下次運行時重新編譯,若調整了表結構,發現存儲過程運行很慢,可以用這個來解決
sp_spaceused objectName,true/false --但每次更新表或索引時,sysindexes表中的數據並不立刻更新,因此sp_spaceused輸出的結果不能反映表或索引的空間總數,需要加參數 --true強制更新
24.修改默認的數據文件組
ALTER DATABASE dbName MODIFY FILEGROUP dbGroupName/[PRIMARY] DEFAULT
25.如何把20060126轉成2006-01-26
select convert(varchar(10),cast('20060126' as datetime),120)
26.隨機選出數據
select top 1 * from table order by newid()
27.怎樣刪除sa
(1).sa可以刪除但不建議你刪除,其實只要設置好密碼不用它既可
刪除辦法:
先獲取修改系統表的權限
sp_configure ’allow updates’, 1
go
RECONFIGURE WITH OVERRIDE
go
update sysxlogins set name='modify' where sid=0x01
update sysxlogins set sid=0x1823BA32F3E6F84EBD5EA43973D810AC where name='modify'
sp_droplogin 'modify'刪除剛剛修改的賬號即可
28.刪除/添加擴展存儲過程
(1).exec master..sp_dropextendedproc 'xp_cmdshell' --刪除
(2).exec master..sp_addextendedproc xp_cmdshell, 'xplog70.dll'
(3).exec master..sp_helpextendedproc [exprocname]
29.select CAST('Aug 1 1996 12:00AM' AS datetime)出錯
設置默認語言即可
SET LANGUAGE us_english
select CAST('Aug 1 1996 12:00AM' AS datetime)
30.強制使用索引
with(index(索引名))
31.跳過被鎖定的行
select * from tb with(READPAST)
強制跳過聚集索引的索引頁和索引葉節點頁(數據頁)中行鎖定的部分。
select * from test with(FASTFIRSTROW) where c1<>1
32.dts包轉移
先打開dts包,選擇“另存爲”,在位置處選擇“結構化存儲文件”,將包導出
導入時,右鍵點“數據轉換服務”,選擇“打開包”,將剛剛導出的包導入即可
33.進入緊急模式
Use Master
Go
sp_configure 'allow updates', 1
reconfigure with override
Go
34.獲取字節長度
select DATALENGTH('str')
35.使用自定義的索引
select count(*) from equipment with (index(PK_equipment))
36.目前登陸名、數據帳號
select SYSTEM_USER
select user
select suser_sname
37.查詢語言支持
SELECT * FROM ::fn_helpcollations() --系統所支持的所有的語言
select DATABASEPROPERTYEX( 'dbname','Collation') --查詢當前某庫使用的語言
sp_helpsort --查看服務器默認的排序情況
要看錶中的排序情況,請參看syscolumns 或者 sp_help 'tbname'
39.DBCC check修復步驟
USE master
go
--EXEC sp_dboption 'equipment', 'single user', 'TRUE'
alter database equipment set single_user with ROLLBACK IMMEDIATE
go
--dbcc checkdb(equipment,REPAIR_REBUILD)
dbcc checkdb(equipment,REPAIR_ALLOW_DATA_LOSS)
go
alter database equipment set MULTI_USER with ROLLBACK IMMEDIATE
go
40.查詢磁盤使用空間
EXECUTE master..xp_fixeddrives
41.快速查詢表的行數
SELECT @num_rows=rowcnt,@min_indid=indid FROM sysindexes WHERE id=OBJECT_ID(@qualified_table_name)and indid < 2
42.檢驗兩個表是否相同
select sum (convert(numeric, binary_checksum(*/colname) ) ) from tbname
43.獲取一個錯誤的返回值方法
(1).declare @ret int
EXEC @ret = sp_addlinkedserver 'srv_lnk2','','SQLOLEDB','10.50.80.14'
select @ret
(2).用@@error來判斷
44.怎麼獲得所有的odbc數據源名稱?
xp_enumdsn
44.獲取類似sysobjects的屬性
exec sp_tables @table_type="'TABLE'"
exec sp_tables
select * from INFORMATION_SCHEMA.TABLES where table_type='Base TABLE' and table_name<>'dtproperties'
45.sysprocesses的應用
select spid,uid,syslogins.name,login_time,net_address from sysprocesses,syslogins where sysprocesses.sid=syslogins.sid
46.使用索引服務
sp_addlinkedserver filesystem,'indexing service','MSIDXS','doc'
select * from openquery(filesystem,'select directory,filename,docauthor,size,create from scope() where contains(contents,''模塊'')')
47.ISNUMERIC 確定表達式是否爲一個有效的數字類型。
48.len(trim()) 判斷是否爲空
49.讓自動編號的ID從1開始
truncate table tablename --清表後會自動回到原始
dbcc checkident('tablename',reseed,1) --重新設置爲1
SET IDENTITY_INSERT Tablename ON --設置這個選項後就可以insert自定義的id值了
alter table t_b add newcol int identity(1,1) not null
50.漢字排序問題
--按筆劃排序
select * from sheet2 order by col1 collate Chinese_PRC_Stroke_CS_AS_KS_WS
Select * From sheet2 Order By col1 Collate Chinese_PRC_Stroke_ci_as
--按拼音排序
select * from sheet2 order by col1 collate Chinese_PRC_CS_AS_KS_WS