臨近年終,在工作之餘對工作和學習中遇到的問題以及常用的一些知識點做了些整理,以備後用。本文涉及的內容為資料庫,算是對開發總結(1)---資料庫一文的補充。
1 對於主鍵設定了Identity的表,在刪除表中資料後再往表中插入資料,Identity列不是從1起始了,如果想刪除資料後Indentity列仍從1起始,可以用下面代碼來刪除資料。
truncate table tablenameDBCC CHECKIDENT(tablename,RESEED,1)
2 判斷指定表在資料庫中是否存在
if exists(select name from sysobjects where name='tablename' and type='u')
3 判斷指定列在指定表中是否存在
if exists(select * from sys.columns,sys.tables where sys.columns.object_id = sys.tables.object_id and sys.tables.name='tablename' and sys.columns.[name]='columnname')
4 在編寫代碼產生器之類的程式的時候,通常需要取出資料庫中所有的表名以及表中欄位的一些基本資料,如欄位長度、欄位類型、描述等。實現上面要求的sql語句如下:
--取資料庫中表的集合select * from sysobjects where xtype='u' order by name--取表中欄位的一些基本資料select sys.columns.name, --欄位名 sys.types.name as typename, --欄位類型 sys.columns.max_length, --欄位長度 sys.columns.is_nullable, --是否可空 (select count(*) from sys.identity_columns where sys.identity_columns.object_id = sys.columns.object_id and sys.columns.column_id = sys.identity_columns.column_id ) as is_identity ,--是否自增 (select value from sys.extended_properties where sys.extended_properties.major_id = sys.columns.object_id and sys.extended_properties.minor_id = sys.columns.column_id ) as description --注釋from sys.columns, sys.tables, sys.typeswhere sys.columns.object_id = sys.tables.object_id and sys.columns.system_type_id=sys.types.system_type_id and sys.tables.name='tablename'order by sys.columns.column_id
5 在預存程序中使用事務
create procedure procnameasbegin tran --執行sql語句if @@ERROR!=0 begin rollback tran --失敗end else begin commit tran --成功end
6 清除資料庫日誌
DUMP TRANSACTION DatabseName WITH NO_LOGBACKUP LOG DatabseName WITH NO_LOG DBCC SHRINKFILE(DatabseLogName,1) --DatabseName為資料庫名稱--DatabseLogName為記錄檔名,可以通過下面語句得到--select name from sysfiles
還有一種比較簡單的方法是分離資料庫,刪除記錄檔,再附加資料庫,這樣產生的記錄檔只有500多k。
下面介紹幾個常用的系統預存程序和函數
7 db_name() 得到資料庫名稱
select db_name() Test(1 行受影響)
8 object_id 可以得到對象在系統中的編號,對象包括表、視圖、預存程序等。如果不存在返回null,所以也可以用來判斷表是否存在。
select object_id('objectname')--判斷表是否存在if object_id('tablename') is not null
9 sp_helptext 用來得到視圖、預存程序等對象的文本,可以很快速找到,不過會改變視圖或預存程序的格式。所以這個系統預存程序我通常都是用來查看,如果要修改一個預存程序我還是會通過樹形菜單去找到預存程序然後修改儲存。
sp_helptext 'objectname'
10 parsename,可以得到對象名稱的指定部分,該函數有兩個參數,第一個為對象名稱,第二個為指定部分的代號。
select parsename('oec2003.databasename.dbo.tablename',1) --對象名稱返回tablenameselect parsename('oec2003.databasename.dbo.tablename',2) --Schema名稱返回dboselect parsename('oec2003.databasename.dbo.tablename',3) --資料庫名稱返回databasenameselect parsename('oec2003.databasename.dbo.tablename',4) --伺服器名稱返回oec200
先就寫這麼多吧,後面整理出來的會陸續補上。