欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

MS sql server判斷數據庫、表、存儲過程、視圖、函數是否存在

admin
2012年1月21日 18:17 本文熱度 3321

--如果是實表可以用
if exists (select * from sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[表名]

--如果是臨時表可以用(說明,如果用查找實表方法來打臨時表會找不到.發布區別對代.)
if object_id('tempdb..##temp') is not null
   drop table ##temp


--判斷存儲過程是否存在
if exists(select 1 from sysobjects where id=object_id('所有者.存儲過程名') and xtype='P')  
print '存在'  
else  
print '不存在'


--判斷視圖是否存在
--SQL Server 2000
IF EXISTS (SELECT * FROM sysviews WHERE object_id = '[dbo].[視圖名]'
--SQL Server 2005
IF EXISTS (SELECT * FROM sys.views WHERE object_id = '[dbo].[視圖名]'



/*
sysObjects (
Name sysname,      --object 名稱
id   int,          --object id
xtype char(2),     -- object 類型  
type char(2),     -- Object 類型(與xtype 似乎一模一樣? 有點郁悶…)
uid   smallint,     -- object 所有者的ID
...                --其他的字段不常用到。  
)


sysobjects的xtype 代表的對象類型。可以是下列對象類型中的一種:
C = CHECK 約束
D = 默認值或 DEFAULT 約束
F = FOREIGN KEY 約束
L = 日志
FN = 標量函數
IF = 內嵌表函數
P = 存儲過程
PK = PRIMARY KEY 約束(類型是 K)
RF = 復制篩選存儲過程
S = 系統表
TF = 表函數
TR = 觸發器
U = 用戶表
UQ = UNIQUE 約束(類型是 K)
V = 視圖
X = 擴展存儲過程




object_id和data_object_id都是表示數據庫對象的唯一標志。

object_id是數據庫對象的邏輯id,data_object_id是數據庫對象的物理id。

如果一些object沒有物理屬性的話那它就不存在data_object_id,例如procedure,function,package,data type,db link,mv定義,view定義,臨時表,分區表定義等等這些object都是沒有對應著某個segment,因此它們的data_object_id 都為空。

當一個表建立的時候,他的object_id 和 data_object_id是相等的。當表move和truncate后data_object_id會發生變化。修改表結構不會更改。

select object_id,data_object_id from user_objects where object_name=’T';
OBJECT_ID DATA_OBJECT_ID
———- ————–
63053 63464

SELECT HEADER_FILE,HEADER_BLOCK,BLOCKS FROM DBA_SEGMENTS WHERE SEGMENT_NAME=’T’ AND OWNER=’TEST’;
HEADER_FILE HEADER_BLOCK BLOCKS
———– ———— ———-
4 467 8


*/



SELECT * FROM sysobjects WHERE xtype='U' AND id=OBJECT_ID('Booking')


該文章在 2012/1/21 18:28:26 編輯過

全部評論2

admin
2012年1月21日 18:22

1 判斷數據庫是否存在
Sql代碼
if exists (select * from sys.databases where name = ’數據庫名’
  drop database [數據庫名]  if exists (select * from sys.databases where name = ’數據庫名’)
  drop database [數據庫名]

2 判斷表是否存在
Sql代碼
if exists (select * from sysobjects where id = object_id(N’[表名]’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1) 
  drop table [表名]  if exists (select * from sysobjects where id = object_id(N’[表名]’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)
  drop table [表名]

3 判斷存儲過程是否存在
Sql代碼
if exists (select * from sysobjects where id = object_id(N’[存儲過程名]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1) 
  drop procedure [存儲過程名]  if exists (select * from sysobjects where id = object_id(N’[存儲過程名]’) and OBJECTPROPERTY(id, N’IsProcedure’) = 1)
  drop procedure [存儲過程名]

4 判斷臨時表是否存在
Sql代碼
if object_id(’tempdb..#臨時表名’) is not null   
  drop table #臨時表名  if object_id(’tempdb..#臨時表名’) is not null 
  drop table #臨時表名

5 判斷視圖是否存在
Sql代碼
--SQL Server 2000  
IF EXISTS (SELECT * FROM sysviews WHERE object_id = ’[dbo].[視圖名]’ 
--SQL Server 2005  
IF EXISTS (SELECT * FROM sys.views WHERE object_id = ’[dbo].[視圖名]’

6 判斷函數是否存在
Sql代碼
--  判斷要創建的函數名是否存在   
  if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[函數名]’) and xtype in (N’FN’, N’IF’, N’TF’))   
  drop function [dbo].[函數名]    --  判斷要創建的函數名是否存在 
  if exists (select * from dbo.sysobjects where id = object_id(N’[dbo].[函數名]’) and xtype in (N’FN’, N’IF’, N’TF’)) 
  drop function [dbo].[函數名] 

7 獲取用戶創建的對象信息
Sql代碼
SELECT [name],[id],crdate FROM sysobjects where xtype=’U’ 
 
/* 
xtype 的表示參數類型,通常包括如下這些 
C = CHECK 約束 
D = 默認值或 DEFAULT 約束 
F = FOREIGN KEY 約束 
L = 日志 
FN = 標量函數 
IF = 內嵌表函數 
P = 存儲過程 
PK = PRIMARY KEY 約束(類型是 K) 
RF = 復制篩選存儲過程 
S = 系統表 
TF = 表函數 
TR = 觸發器 
U = 用戶表 
UQ = UNIQUE 約束(類型是 K) 
V = 視圖 
X = 擴展存儲過程 
*/  SELECT [name],[id],crdate FROM sysobjects where xtype=’U’
/*
xtype 的表示參數類型,通常包括如下這些
C = CHECK 約束
D = 默認值或 DEFAULT 約束
F = FOREIGN KEY 約束
L = 日志
FN = 標量函數
IF = 內嵌表函數
P = 存儲過程
PK = PRIMARY KEY 約束(類型是 K)
RF = 復制篩選存儲過程
S = 系統表
TF = 表函數
TR = 觸發器
U = 用戶表
UQ = UNIQUE 約束(類型是 K)
V = 視圖
X = 擴展存儲過程
*/

8 判斷列是否存在
Sql代碼
if exists(select * from syscolumns where id=object_id(’表名’) and name=’列名’
  alter table 表名 drop column 列名  if exists(select * from syscolumns where id=object_id(’表名’) and name=’列名’)
  alter table 表名 drop column 列名

9 判斷列是否自增列
Sql代碼
if columnproperty(object_id(’table’),’col’,’IsIdentity’)=1 
  print ’自增列’ 
else 
  print ’不是自增列’ 
 
SELECT * FROM sys.columns WHERE object_id=OBJECT_ID(’表名’
AND is_identity=1  if columnproperty(object_id(’table’),’col’,’IsIdentity’)=1
  print ’自增列’
else
  print ’不是自增列’
SELECT * FROM sys.columns WHERE object_id=OBJECT_ID(’表名’)
AND is_identity=1

10 判斷表中是否存在索引
Sql代碼
if exists(select * from sysindexes where id=object_id(’表名’) and name=’索引名’)   
  print  ’存在’   
else   
  print  ’不存在  if exists(select * from sysindexes where id=object_id(’表名’) and name=’索引名’) 
  print  ’存在’ 
else 
  print  ’不存在

11 查看數據庫中對象
Sql代碼
SELECT * FROM sys.sysobjects WHERE name=’對象名’  SELECT * FROM sys.sysobjects WHERE name=’對象名’


該評論在 2012/1/21 18:25:04 編輯過
admin
2012年1月21日 18:27
sql下用了判斷各種資源是否存在的代碼,很實用。需要的朋友可以參考下。sql判斷是否存在
--判斷數據庫是否存在
if exists(select * from master..sysdatabases where name=N'庫名')
print 'exists'
else
print 'not exists'
---------------
-- 判斷要創建的表名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[表名]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
-- 刪除表
drop table [dbo].[表名]
GO
---------------
--判斷要創建臨時表是否存在
If Object_Id('Tempdb.dbo.#Test') Is Not Null
Begin
print '存在'
End
Else
Begin
print '不存在'
End
---------------
-- 判斷要創建的存儲過程名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[存儲過程名]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 刪除存儲過程
drop procedure [dbo].[存儲過程名]
GO
---------------
-- 判斷要創建的視圖名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[視圖名]') and OBJECTPROPERTY(id, N'IsView') = 1)
-- 刪除視圖
drop view [dbo].[視圖名]
GO
---------------
-- 判斷要創建的函數名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[函數名]') and xtype in (N'FN', N'IF', N'TF'))
-- 刪除函數
drop function [dbo].[函數名]
GO
if col_length('表名', '列名') is null
print '不存在'
select 1 from sysobjects where id in (select id from syscolumns where name='列名') and name='表名'

該評論在 2012/1/21 18:28:00 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved