SQL中OBJECT_ID,OBJECT_NAME,OBJECT_DEFINITION的用法

来源:互联网 发布:网络英雄传2暗黑之门 编辑:程序博客网 时间:2024/06/06 14:03
 

SQL中OBJECT_ID,OBJECT_NAME,OBJECT_DEFINITION的用法

-

标签:OBJECT_ID,OBJECT_NAME,OBJECT_DEFINITION

在SQL SERVER中数据库中的对象(表,存储过程,函数,视图等)在系统表中保存都用objectid做标识的.执行下面的SQL就明白了:

 

  1. SELECT * FROM sys.objects  

与对象相关最常用的三个函数:

 

OBJECT_ID:此方法返回数据库对象标识号。类型为int,表示该对象在系统中的编号。

OBJECT_NAME:根据对象ID得到对象名

OBJECT_DEFINITION:返回对象的源文件.

 

示例1:

 

 

  1. --新建一个存储过程  
  2. create PROCEDURE [dbo].[usp_TestProcedure]      
  3. AS  
  4. BEGIN  
  5. PRINT 'this is a procedure '  
  6. END  
  1. DECLARE @ObjectID INT  
  2. DECLARE @ObjectName varchar(20)  
  3. DECLARE @ObjectDefine varchar(max)  
  4. SET @ObjectID = OBJECT_ID('usp_TestProcedure')  
  5. set @ObjectName = OBJECT_NAME(@ObjectID)  
  6. SET @ObjectDefine = OBJECT_DEFINITION(@ObjectID)  
  1. select @ObjectID,@ObjectName,@ObjectDefine  

其中@ObjectName为:usp_TestProcedure.

 

@ObjectDefine:

  1. create PROCEDURE [dbo].[usp_TestProcedure]        
  2. AS    
  3. BEGIN    
  4. PRINT 'this is a procedure '    
  5. END   

示例2:

 

a.表不存在时新建表:

 

  1. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[cs_Threads]'AND type in (N'U'))  
  2. BEGIN  
  3. CREATE TABLE [dbo].[cs_Threads](  
  4.     [ThreadID] [int] IDENTITY(1,1) NOT NULL,  
  5.     [SectionID] [intNOT NULL,  
  6.     [UserID] [intNOT NULL,  
  7.     [PostAuthor] [nvarchar](64) NULL CONSTRAINT [DF_cs_Threads_PostAuthor]  DEFAULT (''),  
  8.     [PostDate] [datetime] NOT NULL,  
  9.     [ThreadDate] [datetime] NOT NULL,  
  10.     [LastViewedDate] [datetime] NOT NULL CONSTRAINT [DF_cs_Threads_LastViewedDate]  DEFAULT (getdate()),  
  11.     [StickyDate] [datetime] NOT NULL,  
  12.     [TotalViews] [intNOT NULL CONSTRAINT [DF_cs_Threads_TotalViews]  DEFAULT ((0)),  
  13.     [TotalReplies] [intNOT NULL CONSTRAINT [DF_cs_Threads_TotalReplies]  DEFAULT ((0)),  
  14.     [MostRecentPostAuthorID] [intNOT NULL,  
  15.     [MostRecentPostAuthor] [nvarchar](64) NULL CONSTRAINT [DF_cs_Threads_MostRecentPostAuthor]  DEFAULT (''),  
  16.     [MostRecentPostID] [intNOT NULL,  
  17.     [IsLocked] [bitNOT NULL,  
  18.     [IsSticky] [bitNOT NULL,  
  19.     [IsApproved] [bitNOT NULL CONSTRAINT [DF_cs_Threads_IsApproved]  DEFAULT ((1)),  
  20.     [RatingSum] [intNOT NULL CONSTRAINT [DF_cs_Threads_RatingSum]  DEFAULT ((0)),  
  21.     [TotalRatings] [intNOT NULL CONSTRAINT [DF_cs_Threads_TotalRating]  DEFAULT ((0)),  
  22.     [ThreadEmoticonID] [intNOT NULL CONSTRAINT [DF_cs_Threads_ThreadEmoticon]  DEFAULT ((0)),  
  23.     [ThreadStatus] [intNOT NULL CONSTRAINT [DF_cs_Threads_ThreadStatus]  DEFAULT ((0)),  
  24.     [SettingsID] [intNULL,  
  25.  CONSTRAINT [PK_cs_Threads] PRIMARY KEY CLUSTERED   
  26. (  
  27.     [ThreadID] ASC  
  28. )WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]  
  29. ON [PRIMARY]  
  30. END  
  31. GO  

b.存储过程不存在时,新建存储过程

 

 

  1. IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[cs_PostCategories_Get_ByName]'AND type in (N'P', N'PC'))  
  2. BEGIN  
  3. EXEC dbo.sp_executesql @statement = N' 
  4. CREATE PROCEDURE [dbo].[cs_PostCategories_Get_ByName] 
  5.     @Name nvarchar(256), 
  6.     @SectionQuerySQL ntext, 
  7.     @SettingsID int 
  8. AS 
  9.  
  10. SET Transaction Isolation Level Read UNCOMMITTED 
  11.  
  12. CREATE TABLE #Sections 
  13. ( 
  14.     SectionID int 
  15. ) 
  16.  
  17. INSERT INTO #Sections (SectionID) 
  18. EXEC (@SectionQuerySQL) 
  19.  
  20. SELECT 
  21.     C.CategoryID, C.SectionID, C.Name, C.IsEnabled, C.ParentID, C.Path, C.Description, C.SettingsID, 
  22.     C.TotalThreads, C.MostRecentPostDate, C.TotalSubThreads, C.MostRecentSubPostDate, C.DateCreated, C.FeaturedPostID 
  23. FROM cs_Post_Categories C 
  24. WHERE C.SectionID in (select SectionID from #Sections) 
  25.     and C.SettingsID = @SettingsID 
  26.     and C.[Name] = @Name 
  27. '   
  28. END  

c.索引不存在时,新建索引

 

 

  1. IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[cs_Threads]'AND name = N'IX_cs_Threads')  
  2. CREATE NONCLUSTERED INDEX [IX_cs_Threads] ON [dbo].[cs_Threads]   
  3. (  
  4.     [SectionID] ASC,  
  5.     [ThreadID] DESC  
  6. )WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]  
  7. GO