USE master
go
/*查詢資料庫是否存在*/
select * From master.dbo.sysdatabases where name='Game_Card' and Status <>512
/* 但在實際使用中,需判斷Status狀態位:
其中某些狀態位可由使用者使用 sp_dboption(read only、dbo
use only、single user等)進行設定:
1 = autoclose;使用 sp_dboption設定。資料庫完全關閉,其資源在最後一個使用者登出後釋放。
4 = select into/bulkcopy;使用 sp_dboption設定。允許使用
Select INTO語句和快速大量複製。
8 = trunc. log on chkpt;使用 sp_dboption設定。如果資料庫處於日誌截斷模式,則檢查點將截斷日誌中非活動的部分。只能為
master資料庫設定此選項。16 = torn page detection,使用 sp_dboption設定。可以檢測殘缺頁。
32 = loading。
64 = pre recovery。
128 = recovering。
256 = not recovered。
512 = offline;使用sp_dboption設定。資料庫將處於離線狀態。
1024 = read only;使用 sp_dboption設定。使用者僅能讀取資料庫中的資料而無法對其進行修改。
2048 = dbo use only;使用sp_dboption設定。只有資料庫擁有者可以使用資料庫。
4096 = single user;使用 sp_dboption設定。每次只能有一個使用者訪問資料庫。
32768 = emergency mode。
4194304 = autoshrink。
1073741824 = cleanly shutdown。
可以同時開啟多個位。
*/
--SQL Server中判斷表對象是否存在:
/*
select count(*) from sysobjects where id = object_id('資料庫名.Owner.表名')
if exists
(select count(*) from sysobjects where id = object_id('資料庫名.Owner.表名'))
print '存在'
else
print '不存在'
*/
use Game_Card
go
select count(*) from sysobjects where id = object_id('Game_Card.dbo.game_card')
if exists
(select count(*) from sysobjects where id = object_id('Game_Card.dbo.game_card'))
print '存在'
use Game_Card
go
select count(*) from dbo.game_card
/*SQL Server中判斷表中欄位是否存在:
if exists(select * from syscolumns where name='colname1' and id=object_id('資料庫名.Owner.表名'))
print '存在'
else
print '不存在'
代表表tablename1中存在colname1欄位 */
查詢索引是否存在
SELECT 1 FROM sys.indexes WHERE object_id=OBJECT_ID(@tname, N'U') and NAME=@iname
其中:@tname表示建索引的表名,@iname表示索引名。
eg:
[sql] view plaincopyprint?
- select top 1 1 from sys.indexes where object_id=OBJECT_ID('Orders', N'U') and name='idx_cl_od'
select top 1 1 from sys.indexes where object_id=OBJECT_ID('Orders', N'U') and name='idx_cl_od'
擴充知識
1. 在每一個資料庫中都有sys.sysobjects用於包括在資料庫中建立的每個對象(例如約束、預設值、日誌、規則以及預存程序)。詳細的說明資訊參看MSDN上的協助文檔:sys.sysobjects
2. OBJECT_ID的作用是返回架構範圍內對象的資料庫物件標識號。如果找不到資料庫或對象的名稱,例如相應名稱不存在或拼字不正確,則會返回NULL。詳細的說明資訊參看MSDN上的協助文檔:object_id
3. sys.indexes用於儲存每個表格對象(例如,表、視圖或資料表值函式)的索引或堆,詳細的說明資訊參看MSDN上的協助文檔:sys.indexes