sql 數據庫大全

1. 查看數據庫的版本 

select @@version 

2. 查看數據庫所在機器操作系統參數 

exec master..xp_msver 

3. 查看數據庫啓動的參數 

sp_configure 

4. 查看數據庫啓動時間 

select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1 

查看數據庫服務器名和實例名 

print 'Server Name...............:' + convert(varchar(30),@@SERVERNAME) 

print 'Instance..................:' + convert(varchar(30),@@SERVICENAME) 

5. 查看所有數據庫名稱及大小 

sp_helpdb 

重命名數據庫用的SQL 

sp_renamedb 'old_dbname', 'new_dbname' 

6. 查看所有數據庫用戶登錄信息 

sp_helplogins 

查看所有數據庫用戶所屬的角色信息 

sp_helpsrvrolemember 

修復遷移服務器時孤立用戶時,可以用的fix_orphan_user腳本或者LoneUser過程 

更改某個數據對象的用戶屬主 

sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner' 

注意:更改對象名的任一部分都可能破壞腳本和存儲過程。 

把一臺服務器上的數據庫用戶登錄信息備份出來可以用add_login_to_aserver腳本 

查看某數據庫下,對象級用戶權限 

sp_helprotect 

7. 查看鏈接服務器 

sp_helplinkedsrvlogin 

查看遠端數據庫用戶登錄信息

sp_helpremotelogin 

8.查看某數據庫下某個數據對象的大小 

sp_spaceused @objname 

還可以用sp_toptables過程看最大的N(默認爲50)個表 

查看某數據庫下某個數據對象的索引信息 

sp_helpindex @objname 

還可以用SP_NChelpindex過程查看更詳細的索引情況 

SP_NChelpindex @objname 

clustered索引是把記錄按物理順序排列的,索引佔的空間比較少。 

對鍵值DML操作十分頻繁的表我建議用非clustered索引和約束,fillfactor參數都用默認值。 

查看某數據庫下某個數據對象的的約束信息 

sp_helpconstraint @objname

9.查看數據庫裏所有的存儲過程和函數 

use @database_name 

sp_stored_procedures 

查看存儲過程和函數的源代碼 

sp_helptext '@procedure_name' 

查看包含某個字符串@str的數據對象名稱 

select distinct object_name(id) from syscomments where text like '%@str%' 

創建加密的存儲過程或函數在AS前面加WITH ENCRYPTION參數 

解密加密過的存儲過程和函數可以用sp_decrypt過程 

10.查看數據庫裏用戶和進程的信息 

sp_who 

查看SQL Server數據庫裏的活動用戶和進程的信息 

sp_who 'active' 

查看SQL Server數據庫裏的鎖的情況 

sp_lock 

進程號1--50是SQL Server系統內部用的,進程號大於50的纔是用戶的連接進程. 

spid是進程編號,dbid是數據庫編號,objid是數據對象編號 

查看進程正在執行的SQL語句 

dbcc inputbuffer () 

推薦大家用經過改進後的sp_who3過程可以直接看到進程運行的SQL語句 

sp_who3 

檢查死鎖用sp_who_lock過程 

sp_who_lock 

11.查看和收縮數據庫日誌文件的方法 

查看所有數據庫日誌文件大小 

dbcc sqlperf(logspace) 

如果某些日誌文件較大,收縮簡單恢復模式數據庫日誌,收縮後@database_name_log的大小單位爲M 

backup log @database_name with no_log 

dbcc shrinkfile (@database_name_log, 5) 

12.分析SQL Server SQL 語句的方法:

set statistics time {on | off} 

set statistics io {on | off} 

圖形方式顯示查詢執行計劃 

在查詢分析器->查詢->顯示估計的評估計劃(D)-Ctrl-L 或者點擊工具欄裏的圖形 

文本方式顯示查詢執行計劃 

set showplan_all {on | off} 

set showplan_text { on | off } 

set statistics profile { on | off } 

13.出現不一致錯誤時,NT事件查看器裏出3624號錯誤,修復數據庫的方法 
先註釋掉應用程序裏引用的出現不一致性錯誤的表,然後在備份或其它機器上先恢復然後做修復操作 

alter database [@error_database_name] set single_user 

修復出現不一致錯誤的表 

dbcc checktable('@error_table_name',repair_allow_data_loss) 

或者可惜選擇修復出現不一致錯誤的小型數據庫名 

dbcc checkdb('@error_database_name',repair_allow_data_loss) 

alter database [@error_database_name] set multi_user 

CHECKDB 有3個參數:

repair_allow_data_loss 包括對行和頁進行分配和取消分配以改正分配錯誤、結構行或頁的錯誤,以及刪除已損壞的文本對象,這些修復可能會導致一些數據丟失。 

修復操作可以在用戶事務下完成以允許用戶回滾所做的更改。 

如果回滾修復,則數據庫仍會含有錯誤,應該從備份進行恢復。 

如果由於所提供修復等級的緣故遺漏某個錯誤的修復,則將遺漏任何取決於該修復的修復。 

修復完成後,請備份數據庫。 

repai*_**st 進行小的、不耗時的修復操作,如修復非聚集索引中的附加鍵。 

這些修復可以很快完成,並且不會有丟失數據的危險。 

repair_rebuild 執行由 repai*_**st 完成的所有修復,包括需要較長時間的修復(如重建索引)。 

執行這些修復時不會有丟失數據的危險。

添加、刪除、修改使用db.Execute(Sql)命令執行操作 
╔--------------------╗ 
☆ 數據記錄篩選 ☆ 
╚--------------------╝ 
注意:單雙引號的用法可能有誤(沒有測式) 

Sql = "Select Distinct 字段名 From 數據表" 
Distinct函數,查詢數據庫存表內不重複的記錄 

Sql = "Select Count(*) From 數據表 where 字段名1>#18:0:0# and 字段名1< #19:00# " 
count函數,查詢數庫表內有多少條記錄,“字段名1”是指同一字段 
例: 
set rs=conn.execute("select count(id) as idnum from news") 
response.write rs("idnum") 

sql="select * from 數據表 where 字段名 between 值1 and 值2" 
Sql="select * from 數據表 where 字段名 between #2003-8-10# and #2003-8-12#" 
在日期類數值爲2003-8-10 19:55:08 的字段裏查找2003-8-10至2003-8-12的所有記錄,而不管是幾點幾分。 

select * from tb_name where datetime between #2003-8-10# and #2003-8-12# 
字段裏面的數據格式爲:2003-8-10 19:55:08,通過sql查出2003-8-10至2003-8-12的所有紀錄,而不管是幾點幾分。 

Sql="select * from 數據表 where 字段名=字段值 order by 字段名 [desc]" 

Sql="select * from 數據表 where 字段名 like '%字段值%' order by 字段名 [desc]" 
模糊查詢 

Sql="select top 10 * from 數據表 where 字段名 order by 字段名 [desc]" 
查找數據庫中前10記錄 

Sql="select top n * form 數據表 order by newid()" 
隨機取出數據庫中的若干條記錄的方法 
top n,n就是要取出的記錄數 

Sql="select * from 數據表 where 字段名 in ('值1','值2','值3')" 

╔--------------------╗ 
☆ 添加數據記錄 ☆ 
╚--------------------╝ 
sql="insert into 數據表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)" 

sql="insert into 數據表 valuess (值1,值2,值3 …)" 
不指定具體字段名錶示將按照數據表中字段的順序,依次添加 

sql="insert into 目標數據表 select * from 源數據表" 
把源數據表的記錄添加到目標數據表 

╔--------------------╗ 
☆ 更新數據記錄 ☆ 
╚--------------------╝ 
Sql="update 數據表 set 字段名=字段值 where 條件表達式" 

Sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式" 

Sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n " 
沒有條件則更新整個數據表中的指定字段值 

╔--------------------╗ 
☆ 刪除數據記錄 ☆ 
╚--------------------╝ 
Sql="delete from 數據表 where 條件表達式" 

Sql="delete from 數據表" 
沒有條件將刪除數據表中所有記錄) 

╔--------------------------╗ 
☆ 數據記錄統計函數 ☆ 
╚--------------------------╝ 
AVG(字段名) 得出一個表格欄平均值 
COUNT(*|字段名) 對數據行數的統計或對某一欄有值的數據行數統計 
MAX(字段名) 取得一個表格欄最大的值 
MIN(字段名) 取得一個表格欄最小的值 
SUM(字段名) 把數據欄的值相加 

引用以上函數的方法: 
sql="select sum(字段名) as 別名 from 數據表 where 條件表達式" 
set rs=conn.excute(sql) 
用 rs("別名") 獲取統的計值,其它函數運用同上。 

╔-----------------------------╗ 
☆ 數據表的建立和刪除 ☆ 
╚-----------------------------╝ 
CREATE TABLE 數據表名稱(字段1 類型1(長度),字段2 類型2(長度) …… ) 
例:CREATE TABLE tab01(name varchar(50),datetime default now()) 
DROP TABLE 數據表名稱 (永久性刪除一個數據表) 

╔--------------------------╗ 
☆ 記錄集對象的方法 ☆ 
╚--------------------------╝ 
rs.movenext 將記錄指針從當前的位置向下移一行 
rs.moveprevious 將記錄指針從當前的位置向上移一行 
rs.movefirst 將記錄指針移到數據表第一行 
rs.movelast 將記錄指針移到數據表最後一行 
rs.absoluteposition=N 將記錄指針移到數據表第N行 
rs.absolutepage=N 將記錄指針移到第N頁的第一行 
rs.pagesize=N 設置每頁爲N條記錄 
rs.pagecount 根據 pagesize 的設置返回總頁數 
rs.recordcount 返回記錄總數 
rs.bof 返回記錄指針是否超出數據表首端,true表示是,false爲否 
rs.eof 返回記錄指針是否超出數據表末端,true表示是,false爲否 
rs.delete 刪除當前記錄,但記錄指針不會向下移動 
rs.addnew 添加記錄到數據表末端 
rs.update 更新數據表記錄

select @@version 

2. 查看數據庫所在機器操作系統參數 

exec master..xp_msver 

3. 查看數據庫啓動的參數 

sp_configure 

4. 查看數據庫啓動時間 

select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1 

查看數據庫服務器名和實例名 

print 'Server Name...............:' + convert(varchar(30),@@SERVERNAME) 

print 'Instance..................:' + convert(varchar(30),@@SERVICENAME) 

5. 查看所有數據庫名稱及大小 

sp_helpdb 

重命名數據庫用的SQL 

sp_renamedb 'old_dbname', 'new_dbname' 

6. 查看所有數據庫用戶登錄信息 

sp_helplogins 

查看所有數據庫用戶所屬的角色信息 

sp_helpsrvrolemember 

修復遷移服務器時孤立用戶時,可以用的fix_orphan_user腳本或者LoneUser過程 

更改某個數據對象的用戶屬主 

sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner' 

注意:更改對象名的任一部分都可能破壞腳本和存儲過程。 

把一臺服務器上的數據庫用戶登錄信息備份出來可以用add_login_to_aserver腳本 

查看某數據庫下,對象級用戶權限 

sp_helprotect 

7. 查看鏈接服務器 

sp_helplinkedsrvlogin 

查看遠端數據庫用戶登錄信息

sp_helpremotelogin 

8.查看某數據庫下某個數據對象的大小 

sp_spaceused @objname 

還可以用sp_toptables過程看最大的N(默認爲50)個表 

查看某數據庫下某個數據對象的索引信息 

sp_helpindex @objname 

還可以用SP_NChelpindex過程查看更詳細的索引情況 

SP_NChelpindex @objname 

clustered索引是把記錄按物理順序排列的,索引佔的空間比較少。 

對鍵值DML操作十分頻繁的表我建議用非clustered索引和約束,fillfactor參數都用默認值。 

查看某數據庫下某個數據對象的的約束信息 

sp_helpconstraint @objname

9.查看數據庫裏所有的存儲過程和函數 

use @database_name 

sp_stored_procedures 

查看存儲過程和函數的源代碼 

sp_helptext '@procedure_name' 

查看包含某個字符串@str的數據對象名稱 

select distinct object_name(id) from syscomments where text like '%@str%' 

創建加密的存儲過程或函數在AS前面加WITH ENCRYPTION參數 

解密加密過的存儲過程和函數可以用sp_decrypt過程 

10.查看數據庫裏用戶和進程的信息 

sp_who 

查看SQL Server數據庫裏的活動用戶和進程的信息 

sp_who 'active' 

查看SQL Server數據庫裏的鎖的情況 

sp_lock 

進程號1--50是SQL Server系統內部用的,進程號大於50的纔是用戶的連接進程. 

spid是進程編號,dbid是數據庫編號,objid是數據對象編號 

查看進程正在執行的SQL語句 

dbcc inputbuffer () 

推薦大家用經過改進後的sp_who3過程可以直接看到進程運行的SQL語句 

sp_who3 

檢查死鎖用sp_who_lock過程 

sp_who_lock 

11.查看和收縮數據庫日誌文件的方法 

查看所有數據庫日誌文件大小 

dbcc sqlperf(logspace) 

如果某些日誌文件較大,收縮簡單恢復模式數據庫日誌,收縮後@database_name_log的大小單位爲M 

backup log @database_name with no_log 

dbcc shrinkfile (@database_name_log, 5) 

12.分析SQL Server SQL 語句的方法:

set statistics time {on | off} 

set statistics io {on | off} 

圖形方式顯示查詢執行計劃 

在查詢分析器->查詢->顯示估計的評估計劃(D)-Ctrl-L 或者點擊工具欄裏的圖形 

文本方式顯示查詢執行計劃 

set showplan_all {on | off} 

set showplan_text { on | off } 

set statistics profile { on | off } 

13.出現不一致錯誤時,NT事件查看器裏出3624號錯誤,修復數據庫的方法 
先註釋掉應用程序裏引用的出現不一致性錯誤的表,然後在備份或其它機器上先恢復然後做修復操作 

alter database [@error_database_name] set single_user 

修復出現不一致錯誤的表 

dbcc checktable('@error_table_name',repair_allow_data_loss) 

或者可惜選擇修復出現不一致錯誤的小型數據庫名 

dbcc checkdb('@error_database_name',repair_allow_data_loss) 

alter database [@error_database_name] set multi_user 

CHECKDB 有3個參數:

repair_allow_data_loss 包括對行和頁進行分配和取消分配以改正分配錯誤、結構行或頁的錯誤,以及刪除已損壞的文本對象,這些修復可能會導致一些數據丟失。 

修復操作可以在用戶事務下完成以允許用戶回滾所做的更改。 

如果回滾修復,則數據庫仍會含有錯誤,應該從備份進行恢復。 

如果由於所提供修復等級的緣故遺漏某個錯誤的修復,則將遺漏任何取決於該修復的修復。 

修復完成後,請備份數據庫。 

repai*_**st 進行小的、不耗時的修復操作,如修復非聚集索引中的附加鍵。 

這些修復可以很快完成,並且不會有丟失數據的危險。 

repair_rebuild 執行由 repai*_**st 完成的所有修復,包括需要較長時間的修復(如重建索引)。 

執行這些修復時不會有丟失數據的危險。

添加、刪除、修改使用db.Execute(Sql)命令執行操作 
╔--------------------╗ 
☆ 數據記錄篩選 ☆ 
╚--------------------╝ 
注意:單雙引號的用法可能有誤(沒有測式) 

Sql = "Select Distinct 字段名 From 數據表" 
Distinct函數,查詢數據庫存表內不重複的記錄 

Sql = "Select Count(*) From 數據表 where 字段名1>#18:0:0# and 字段名1< #19:00# " 
count函數,查詢數庫表內有多少條記錄,“字段名1”是指同一字段 
例: 
set rs=conn.execute("select count(id) as idnum from news") 
response.write rs("idnum") 

sql="select * from 數據表 where 字段名 between 值1 and 值2" 
Sql="select * from 數據表 where 字段名 between #2003-8-10# and #2003-8-12#" 
在日期類數值爲2003-8-10 19:55:08 的字段裏查找2003-8-10至2003-8-12的所有記錄,而不管是幾點幾分。 

select * from tb_name where datetime between #2003-8-10# and #2003-8-12# 
字段裏面的數據格式爲:2003-8-10 19:55:08,通過sql查出2003-8-10至2003-8-12的所有紀錄,而不管是幾點幾分。 

Sql="select * from 數據表 where 字段名=字段值 order by 字段名 [desc]" 

Sql="select * from 數據表 where 字段名 like '%字段值%' order by 字段名 [desc]" 
模糊查詢 

Sql="select top 10 * from 數據表 where 字段名 order by 字段名 [desc]" 
查找數據庫中前10記錄 

Sql="select top n * form 數據表 order by newid()" 
隨機取出數據庫中的若干條記錄的方法 
top n,n就是要取出的記錄數 

Sql="select * from 數據表 where 字段名 in ('值1','值2','值3')" 

╔--------------------╗ 
☆ 添加數據記錄 ☆ 
╚--------------------╝ 
sql="insert into 數據表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)" 

sql="insert into 數據表 valuess (值1,值2,值3 …)" 
不指定具體字段名錶示將按照數據表中字段的順序,依次添加 

sql="insert into 目標數據表 select * from 源數據表" 
把源數據表的記錄添加到目標數據表 

╔--------------------╗ 
☆ 更新數據記錄 ☆ 
╚--------------------╝ 
Sql="update 數據表 set 字段名=字段值 where 條件表達式" 

Sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n where 條件表達式" 

Sql="update 數據表 set 字段1=值1,字段2=值2 …… 字段n=值n " 
沒有條件則更新整個數據表中的指定字段值 

╔--------------------╗ 
☆ 刪除數據記錄 ☆ 
╚--------------------╝ 
Sql="delete from 數據表 where 條件表達式" 

Sql="delete from 數據表" 
沒有條件將刪除數據表中所有記錄) 

╔--------------------------╗ 
☆ 數據記錄統計函數 ☆ 
╚--------------------------╝ 
AVG(字段名) 得出一個表格欄平均值 
COUNT(*|字段名) 對數據行數的統計或對某一欄有值的數據行數統計 
MAX(字段名) 取得一個表格欄最大的值 
MIN(字段名) 取得一個表格欄最小的值 
SUM(字段名) 把數據欄的值相加 

引用以上函數的方法: 
sql="select sum(字段名) as 別名 from 數據表 where 條件表達式" 
set rs=conn.excute(sql) 
用 rs("別名") 獲取統的計值,其它函數運用同上。 

╔-----------------------------╗ 
☆ 數據表的建立和刪除 ☆ 
╚-----------------------------╝ 
CREATE TABLE 數據表名稱(字段1 類型1(長度),字段2 類型2(長度) …… ) 
例:CREATE TABLE tab01(name varchar(50),datetime default now()) 
DROP TABLE 數據表名稱 (永久性刪除一個數據表) 

╔--------------------------╗ 
☆ 記錄集對象的方法 ☆ 
╚--------------------------╝ 
rs.movenext 將記錄指針從當前的位置向下移一行 
rs.moveprevious 將記錄指針從當前的位置向上移一行 
rs.movefirst 將記錄指針移到數據表第一行 
rs.movelast 將記錄指針移到數據表最後一行 
rs.absoluteposition=N 將記錄指針移到數據表第N行 
rs.absolutepage=N 將記錄指針移到第N頁的第一行 
rs.pagesize=N 設置每頁爲N條記錄 
rs.pagecount 根據 pagesize 的設置返回總頁數 
rs.recordcount 返回記錄總數 
rs.bof 返回記錄指針是否超出數據表首端,true表示是,false爲否 
rs.eof 返回記錄指針是否超出數據表末端,true表示是,false爲否 
rs.delete 刪除當前記錄,但記錄指針不會向下移動 
rs.addnew 添加記錄到數據表末端 
rs.update 更新數據表記錄
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章