MSSQL2005表重命名sp_rename

时间:2021-06-27 10:40:16

MSSQL2005表重命名sp_rename 存储过程例子 原文在MSDN上

A. 重命名表
以下示例将 SalesTerritory 表重命名为 SalesTerr。

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory', 'SalesTerr';
GO
 

B. 重命名列
以下示例将 SalesTerritory 表中的 TerritoryID 列重命名为 TerrID。

USE AdventureWorks;
GO
EXEC sp_rename 'Sales.SalesTerritory.TerritoryID', 'TerrID', 'COLUMN';
GO
 

C. 重命名索引
以下示例将 IX_ProductVendor_VendorID 索引重命名为 IX_VendorID。

USE AdventureWorks;
GO
EXEC sp_rename N'Purchasing.ProductVendor.IX_ProductVendor_VendorID', N'IX_VendorID', N'INDEX';
GO
 

D. 重命名别名数据类型
以下示例将 Phone 别名数据类型重命名为 Telephone。

USE AdventureWorks;
GO
EXEC sp_rename N'Phone', N'Telephone', N'USERDATATYPE';
GO

存储过程代码
 

MSSQL2005表重命名sp_renameUSE [master]
MSSQL2005表重命名sp_rename
GO
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename
SET ANSI_NULLS ON
MSSQL2005表重命名sp_rename
GO
MSSQL2005表重命名sp_rename
SET QUOTED_IDENTIFIER ON
MSSQL2005表重命名sp_rename
GO
MSSQL2005表重命名sp_rename
ALTER procedure [sys].[sp_rename]
MSSQL2005表重命名sp_rename 
@objname nvarchar(1035),  -- up to 4-part "old" name
MSSQL2005表重命名sp_rename
 @newname sysname,   -- one-part new name
MSSQL2005表重命名sp_rename
 @objtype varchar(13= null -- identifying the name
MSSQL2005表重命名sp_rename
as
MSSQL2005表重命名sp_renameMSSQL2005表重命名sp_rename
/* DOCUMENTATION:
MSSQL2005表重命名sp_rename   [1]  To rename a table, the @objname (meaning OldName) parm can be
MSSQL2005表重命名sp_renamepassed in totally unqualified or fully qualified.
MSSQL2005表重命名sp_rename   [2]  The SA or DBO can rename objects owned by lesser users,
MSSQL2005表重命名sp_renamewithout the need for SetUser.
MSSQL2005表重命名sp_rename   [3]  The Owner portion of a qualified name can usually be
MSSQL2005表重命名sp_renamepassed in in the omitted form (as in MyDb..MyTab or MyTab).  The
MSSQL2005表重命名sp_renametypical exception is when the SA/DBO is trying to rename a table
MSSQL2005表重命名sp_renamewhere the @objname is present twice in sysobjects as a table
MSSQL2005表重命名sp_renameowned only by two different lesser users; requiring an explicit
MSSQL2005表重命名sp_renameowner qualifier in @objname.
MSSQL2005表重命名sp_rename   [4]  An unspecified Owner qualifier will default to the
MSSQL2005表重命名sp_renamecurrent user if doing so will either resolve what would
MSSQL2005表重命名sp_renameotherwise be an ambiguity within @objtype, or will result
MSSQL2005表重命名sp_renamein exactly one match.
MSSQL2005表重命名sp_rename   [5]  If Database is part of the qualified @objname,
MSSQL2005表重命名sp_renamethen it must match the current database.  The @newname parm can
MSSQL2005表重命名sp_renamenever be qualified.
MSSQL2005表重命名sp_rename   [6]  Here are the valid @objtype values.  They correspond to
MSSQL2005表重命名sp_renamesystem tables which track each type:
MSSQL2005表重命名sp_rename      'column'  'database'  'index'  'object'  'userdatatype'
MSSQL2005表重命名sp_renameThe @objtype parm is sometimes required.  It is always required
MSSQL2005表重命名sp_renamefor databases.  It is required whenever ambiguities would
MSSQL2005表重命名sp_renameotherwise exist.  Explicit use of @objtype is always encouraged.
MSSQL2005表重命名sp_rename   [7]  Parms can use quoted_identifiers.  For example:
MSSQL2005表重命名sp_rename   Execute sp_rename 'amy."his table"','"her table"','object'
MSSQL2005表重命名sp_rename
*/

MSSQL2005表重命名sp_rename 
set nocount      on
MSSQL2005表重命名sp_rename 
set ansi_padding on
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
declare @objtypeIN  varchar(13),
MSSQL2005表重命名sp_rename   
@CurrentDb  sysname,
MSSQL2005表重命名sp_rename   
@CountNumNodes int,
MSSQL2005表重命名sp_rename   
@UnqualOldName sysname,
MSSQL2005表重命名sp_rename   
@QualName1  sysname,
MSSQL2005表重命名sp_rename   
@QualName2  sysname,
MSSQL2005表重命名sp_rename   
@QualName3  sysname,
MSSQL2005表重命名sp_rename   
@OwnAndObjName nvarchar(517), -- "[owner].[object]"
MSSQL2005表重命名sp_rename
   @SchemaAndTypeName nvarchar(517), -- "[schema].[type]"
MSSQL2005表重命名sp_rename
   @objid   int,
MSSQL2005表重命名sp_rename   
@xtype   nchar(2),
MSSQL2005表重命名sp_rename   
@indid   int,
MSSQL2005表重命名sp_rename   
@colid   int,
MSSQL2005表重命名sp_rename   
@cnstid   int,
MSSQL2005表重命名sp_rename   
@xusertype  int,
MSSQL2005表重命名sp_rename   
@schid   int,
MSSQL2005表重命名sp_rename   
@objid_tmp  int,
MSSQL2005表重命名sp_rename   
@xtype_tmp  nchar(2),
MSSQL2005表重命名sp_rename   
@retcode  int,
MSSQL2005表重命名sp_rename   
@published  bit  -- Indicates table is used in replication   
MSSQL2005表重命名sp_rename

MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- initial (non-null) settings
MSSQL2005表重命名sp_rename
 select @CurrentDb  = db_name(),
MSSQL2005表重命名sp_rename   
@objtypeIN  = @objtype
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- make type case insensitive
MSSQL2005表重命名sp_rename
 select @objtype = lower(@objtypeIN collate Latin1_General_CI_AS)
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
------------------------------------------------------------------------
MSSQL2005表重命名sp_rename
 -------------------  PHASE 10:  Simple parm edits  ---------------------
MSSQL2005表重命名sp_rename
 ------------------------------------------------------------------------
MSSQL2005表重命名sp_rename

MSSQL2005表重命名sp_rename 
-- Valid rename-type param?
MSSQL2005表重命名sp_rename
 if (@objtype is not null AND
MSSQL2005表重命名sp_rename  
@objtype not in ('column''database''index''object''userdatatype'))
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
raiserror(15249,-1,-1,@objtypeIN)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename 
-- null names?
MSSQL2005表重命名sp_rename
 if (@newname IS null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
raiserror(15223,-1,11,'NewName')
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename 
if (@objname IS null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
raiserror(15223,-1,-1,'OldName')
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- Is NewName minimally valid?
MSSQL2005表重命名sp_rename
 exec @retcode = sp_validname @newname
MSSQL2005表重命名sp_rename 
if @retcode <> 0
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
raiserror(15224,-1,15,@newname)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- Parse apart the perhaps dots-qualified old name.
MSSQL2005表重命名sp_rename
 select @UnqualOldName = parsename(@objname1),
MSSQL2005表重命名sp_rename   
@QualName1 = parsename(@objname2),
MSSQL2005表重命名sp_rename   
@QualName2 = parsename(@objname3),
MSSQL2005表重命名sp_rename   
@QualName3 = parsename(@objname4)
MSSQL2005表重命名sp_rename 
if (@UnqualOldName IS Null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
raiserror(15253,-1,-1,@objname)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- count name parts --
MSSQL2005表重命名sp_rename
 select @CountNumNodes = (case
MSSQL2005表重命名sp_rename    
when @QualName3 is not null then 4
MSSQL2005表重命名sp_rename    
when @QualName2 is not null then 3
MSSQL2005表重命名sp_rename    
when @QualName1 is not null then 2
MSSQL2005表重命名sp_rename    
else 1
MSSQL2005表重命名sp_rename   
end)
MSSQL2005表重命名sp_rename 
if (@objtype  = 'database' AND @CountNumNodes > 1)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
raiserror(15395,-1,20,@objtypeIN)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename 
if (@objtype in ('object','userdatatype'AND @CountNumNodes > 3)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
raiserror(15225,-1,-1,@objname@CurrentDb@objtypeIN)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
---------------------------------------------------------------------------
MSSQL2005表重命名sp_rename
 ----------------------  PHASE 20:  Settle Parm1ItemType  ------------------
MSSQL2005表重命名sp_rename
 ---------------------------------------------------------------------------
MSSQL2005表重命名sp_rename

MSSQL2005表重命名sp_rename 
------------- database?
MSSQL2005表重命名sp_rename
 if (@objtype  = 'database')
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
execute @retcode = sys.sp_renamedb @UnqualOldName ,@newname -- de-docu old sproc
MSSQL2005表重命名sp_rename
  if @retcode <> 0
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
return 0
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
BEGIN TRANSACTION
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
------------ type?
MSSQL2005表重命名sp_rename
 if (@objtype = 'userdatatype' or @objtypeIN is null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
select @xusertype = user_type_id, @schid = schema_id
MSSQL2005表重命名sp_rename   
from sys.types where user_type_id = type_id(@objname)
MSSQL2005表重命名sp_rename  
MSSQL2005表重命名sp_rename  
-- Lock scalar type exclusively and check permissions
MSSQL2005表重命名sp_rename
  if not (@xusertype is null)
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename     
MSSQL2005表重命名sp_rename  
-- cannot pass @objname as it is nvarchar(1035) and Invoke fails %%ScalarType does not compile with four part name.
MSSQL2005表重命名sp_rename
  -- cross db type resolution is not allowed (already taken care of by type_id) so only two part name is required.
MSSQL2005表重命名sp_rename
  if (@QualName1 is not null)
MSSQL2005表重命名sp_rename   
select @SchemaAndTypeName = QuoteName(@QualName1+ '.' + QuoteName(@UnqualOldName)
MSSQL2005表重命名sp_rename  
else
MSSQL2005表重命名sp_rename   
select @SchemaAndTypeName = QuoteName(@UnqualOldName)
MSSQL2005表重命名sp_rename   
MSSQL2005表重命名sp_rename   
EXEC %%ScalarType(MultiName = @SchemaAndTypeName).LockMatchID(ID = @xusertype, Exclusive = 1)
MSSQL2005表重命名sp_rename   
if (@@error <> 0)
MSSQL2005表重命名sp_rename    
select @xusertype = null
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
MSSQL2005表重命名sp_rename  
-- check for wrong param
MSSQL2005表重命名sp_rename
  if ((@xusertype is not null AND @objtype <> 'userdatatype'OR
MSSQL2005表重命名sp_rename   (
@xusertype is null AND @objtype = 'userdatatype'))
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15248,-1,-1,@objtypeIN)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
if not (@xusertype is null)
MSSQL2005表重命名sp_rename   
select @objtype = 'userdatatype'
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- assuming column/index-name, obtain object/column id's
MSSQL2005表重命名sp_rename
 if (@objtype in ('column''index'or @objtypeIN is null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
if @QualName2 is not null
MSSQL2005表重命名sp_rename   
select @objid = object_id(QuoteName(@QualName2+'.'+ QuoteName(@QualName1))
MSSQL2005表重命名sp_rename  
else
MSSQL2005表重命名sp_rename   
select @objid = object_id(QuoteName(@QualName1))
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
if not (@objid is null-- nice try?
MSSQL2005表重命名sp_rename
  begin
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename   
-- obtain owner-qual object name
MSSQL2005表重命名sp_rename
   select @schid = ObjectProperty(@objid'schemaid')
MSSQL2005表重命名sp_rename   
select @OwnAndObjName = QuoteName(schema_name(@schid))+'.'+QuoteName(object_name(@objid))
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename   
EXEC %%Object(MultiName = @OwnAndObjName).LockMatchID(ID = @objid, Exclusive = 1, BindInternal = 0)
MSSQL2005表重命名sp_rename   
if @@error <> 0
MSSQL2005表重命名sp_rename    
select @objid = null
MSSQL2005表重命名sp_rename   
else
MSSQL2005表重命名sp_rename    
select @xtype = type from sys.objects where object_id = @objid
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
------------ column?
MSSQL2005表重命名sp_rename
 if (@objtype = 'column' or @objtypeIN is null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
-- find column
MSSQL2005表重命名sp_rename
  if (@xtype in ('U','V'))
MSSQL2005表重命名sp_rename   
select @colid = column_id from sys.columns
MSSQL2005表重命名sp_rename     
where object_id = @objid and name = @UnqualOldName
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- check for wrong param
MSSQL2005表重命名sp_rename
  if ((@colid is not null AND @objtype <> 'column'OR
MSSQL2005表重命名sp_rename   (
@colid is null AND @objtype = 'column'))
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15248,-1,-1,@objtypeIN)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- remember if we've found a column
MSSQL2005表重命名sp_rename
  if not (@colid is null)
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
select @published = is_published from sys.objects where object_id = @objid
MSSQL2005表重命名sp_rename   
if @published = 0
MSSQL2005表重命名sp_rename    
select @published = is_merge_published from sys.tables where object_id = @objid
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename   
if (@published <> 0)
MSSQL2005表重命名sp_rename    
begin
MSSQL2005表重命名sp_rename     
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename     
raiserror(15051,-1,-1)
MSSQL2005表重命名sp_rename     
return (0)
MSSQL2005表重命名sp_rename    
end
MSSQL2005表重命名sp_rename   
select @objtype = 'column'
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
------------ index?
MSSQL2005表重命名sp_rename
 if (@objtype = 'index' or @objtypeIN is null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
-- find index
MSSQL2005表重命名sp_rename
  if (@xtype in ('U','V'))
MSSQL2005表重命名sp_rename   
select @indid = stats_id from sys.stats
MSSQL2005表重命名sp_rename     
where object_id = @objid and name = @UnqualOldName
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- if we could not find a regular index, try finding an xml index
MSSQL2005表重命名sp_rename
  if (@indid is null )
MSSQL2005表重命名sp_rename   
select @indid = object_id from sys.xml_indexes
MSSQL2005表重命名sp_rename    
where object_id = @objid and name = @UnqualOldName
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- check for wrong param
MSSQL2005表重命名sp_rename
  if ((@indid is not null AND @objtype <> 'index'OR
MSSQL2005表重命名sp_rename   (
@indid is null AND @objtype = 'index'))
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15248,-1,-1,@objtypeIN)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
if not (@indid is null)
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
select @objtype = 'index'
MSSQL2005表重命名sp_rename   
select @cnstid = object_id@xtype = type from sys.objects
MSSQL2005表重命名sp_rename    
where name = @UnqualOldName and parent_object_id = @objid and type in ('PK','UQ')
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
------------ object?
MSSQL2005表重命名sp_rename
 if (@objtype = 'object' or @objtypeIN is null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
-- get object id, type
MSSQL2005表重命名sp_rename
  select @objid_tmp = object_id(@objname)
MSSQL2005表重命名sp_rename  
MSSQL2005表重命名sp_rename  
if not (@objid_tmp is null)
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
-- obtain owner-qual object name
MSSQL2005表重命名sp_rename
   select @schid = ObjectProperty(@objid_tmp'schemaid')
MSSQL2005表重命名sp_rename   
select @OwnAndObjName = QuoteName(schema_name(@schid))+'.'+QuoteName(object_name(@objid_tmp))
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename   
EXEC %%Object(MultiName = @OwnAndObjName).LockMatchID(ID = @objid_tmp, Exclusive = 1, BindInternal = 0)
MSSQL2005表重命名sp_rename   
if @@error <> 0
MSSQL2005表重命名sp_rename    
select @objid_tmp = null
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
select @xtype_tmp = type
MSSQL2005表重命名sp_rename   
from sys.objects where object_id = @objid_tmp
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- if object is a system table, a Scalar function, or a table valued function, skip it.
MSSQL2005表重命名sp_rename

MSSQL2005表重命名sp_rename  
-- Cannot rename system table
MSSQL2005表重命名sp_rename
  if @xtype_tmp = 'S'
MSSQL2005表重命名sp_rename   
select @objid_tmp = NULL
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- Locks parent object and increments schema_ver
MSSQL2005表重命名sp_rename
  if not (@objid_tmp is null)
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename   
if (@xtype_tmp in ('U'))
MSSQL2005表重命名sp_rename   
begin
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename    
select @published = is_merge_published | is_published from sys.tables where object_id = @objid_tmp
MSSQL2005表重命名sp_rename    
if (@published <> 0)
MSSQL2005表重命名sp_rename    
begin
MSSQL2005表重命名sp_rename     
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename     
raiserror(15051,-1,-1)
MSSQL2005表重命名sp_rename     
return (0)
MSSQL2005表重命名sp_rename    
end
MSSQL2005表重命名sp_rename   
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename   
-- parent already locked via locking object
MSSQL2005表重命名sp_rename

MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- check for wrong param
MSSQL2005表重命名sp_rename
  if ((@objid_tmp is not null AND @objtype <> 'object'OR
MSSQL2005表重命名sp_rename   (
@objid_tmp is null AND @objtype = 'object'))
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15248,-1,-1,@objtypeIN)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
if not (@objid_tmp is null)
MSSQL2005表重命名sp_rename   
select @objtype = 'object'@objid = @objid_tmp@xtype = @xtype_tmp
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
---------------------------------------------------------------------
MSSQL2005表重命名sp_rename
 -------------------  PHASE 30:  More parm edits  --------------------
MSSQL2005表重命名sp_rename
 ---------------------------------------------------------------------
MSSQL2005表重命名sp_rename

MSSQL2005表重命名sp_rename 
-- item type determined?
MSSQL2005表重命名sp_rename
 if (@objtype is null)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename  
raiserror(15225,-1,-1,@objname@CurrentDb@objtypeIN)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- was the original name valid given this type?
MSSQL2005表重命名sp_rename
 if (@objtype in ('object','userdatatype'AND @CountNumNodes > 3)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename  
raiserror(15225,-1,-1,@objname@CurrentDb@objtypeIN)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- verify db qualifier is current db
MSSQL2005表重命名sp_rename
 if (@objtype in ('object','userdatatype'))
MSSQL2005表重命名sp_rename  
select @QualName3 = @QualName2
MSSQL2005表重命名sp_rename 
if (isnull(@QualName3@CurrentDb<> @CurrentDb)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename  
raiserror(15333,-1,-1,@QualName3)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
if (@objtype <> 'userdatatype')
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
-- check if system object
MSSQL2005表重命名sp_rename
  select @schid = ObjectProperty(@objid'schemaid')
MSSQL2005表重命名sp_rename  
if (ObjectProperty(@objid'IsMSShipped'= 1 OR
MSSQL2005表重命名sp_rename   
ObjectProperty(@objid'IsSystemTable'= 1)
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15001,-1,-1@objname)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename 
MSSQL2005表重命名sp_rename 
-- System created Date Correlation view and its columns/indexes cannot be renamed.
MSSQL2005表重命名sp_rename
 if (@objid is not null
MSSQL2005表重命名sp_rename  
AND @xtype = ''
MSSQL2005表重命名sp_rename  
AND 1 = Isnull((select is_date_correlation_view from sys.views where object_id = @objid), 0)
MSSQL2005表重命名sp_rename  )
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename  
raiserror(15168,-1,-1@objname)
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- make sure orig no longer shows null
MSSQL2005表重命名sp_rename
 if @objtypeIN is null
MSSQL2005表重命名sp_rename  
select @objtypeIN = @objtype
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- Check for name *ing with existing name(s)
MSSQL2005表重命名sp_rename
 if (@newname <> @UnqualOldName)
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
-- column name *?
MSSQL2005表重命名sp_rename
  if (@objtype = 'column')
MSSQL2005表重命名sp_rename   
if (ColumnProperty(@objid@newname'isidentity'is not null)
MSSQL2005表重命名sp_rename    
select @UnqualOldName = NULL
MSSQL2005表重命名sp_rename  
-- index name *?
MSSQL2005表重命名sp_rename
  if ( (@objtype = 'object' AND @xtype in ('PK','UQ'))
MSSQL2005表重命名sp_rename    
OR @objtype = 'index')
MSSQL2005表重命名sp_rename   
if exists (select * from sys.stats where object_id = @objid and name = @newname)
MSSQL2005表重命名sp_rename    
select @UnqualOldName = NULL
MSSQL2005表重命名sp_rename  
-- cnst name *?
MSSQL2005表重命名sp_rename
  if (@objtype = 'object' OR @cnstid IS NOT null)
MSSQL2005表重命名sp_rename   
if (object_id(QuoteName(schema_name(@schid)) +'.'+ QuoteName(@newname), 'local'is not null)
MSSQL2005表重命名sp_rename    
select @UnqualOldName = NULL
MSSQL2005表重命名sp_rename  
-- stop on *
MSSQL2005表重命名sp_rename
  if (@UnqualOldName is null)
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15335,-1,-1,@newname,@objtypeIN)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
--------------------------------------------------------------------------
MSSQL2005表重命名sp_rename
 --------------------  PHASE 32:  Temporay Table Isssue -------------------
MSSQL2005表重命名sp_rename
 --------------------------------------------------------------------------
MSSQL2005表重命名sp_rename
 -- Disallow renaming object to or from a temp name (starts with #)
MSSQL2005表重命名sp_rename
 if (@objtype = 'object' AND
MSSQL2005表重命名sp_rename  (
substring(@newname,1,1= N'#' OR
MSSQL2005表重命名sp_rename  
substring(object_name(@objid),1,1= N'#'))
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename  
raiserror(15600,-1,-1'sys.sp_rename')
MSSQL2005表重命名sp_rename  
return 1
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
--------------------------------------------------------------------------
MSSQL2005表重命名sp_rename
 --------------------  PHASE 34:  Cautionary messages  --------------------
MSSQL2005表重命名sp_rename
 --------------------------------------------------------------------------
MSSQL2005表重命名sp_rename

MSSQL2005表重命名sp_rename 
if @objtype = 'column'
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
-- Check for Dependencies: No column rename if enforced dependency on column
MSSQL2005表重命名sp_rename
  if exists (select * from sys.sql_dependencies d where
MSSQL2005表重命名sp_rename   d.referenced_major_id 
= @objid
MSSQL2005表重命名sp_rename   
AND d.referenced_minor_id = @colid
MSSQL2005表重命名sp_rename   
AND d.class = 1
MSSQL2005表重命名sp_rename   
-- filter dependencies where the dependent object d.object_id is a date correlation view.
MSSQL2005表重命名sp_rename
   -- Date correlation view owner is the same as of any of the tables they are dependent upon so user having alter access
MSSQL2005表重命名sp_rename
   -- to any of the participating tables will have catalog view access to the MPIV for the following query to succeed.
MSSQL2005表重命名sp_rename
   AND 0 = Isnull((select is_date_correlation_view from sys.views o where o.object_id =  d.object_id), 0)
MSSQL2005表重命名sp_rename   )
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15336,-1,-1@objname)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename 
else if @objtype = 'object'
MSSQL2005表重命名sp_rename 
begin
MSSQL2005表重命名sp_rename  
-- Check for Dependencies: No RENAME or CHANGEOWNER of OBJECT when exists:
MSSQL2005表重命名sp_rename
  if exists (select * from sys.sql_dependencies d where
MSSQL2005表重命名sp_rename   d.referenced_major_id 
= @objid  -- A dependency on this object
MSSQL2005表重命名sp_rename
   AND d.class > 0  -- that is enforced
MSSQL2005表重命名sp_rename
   AND @objid <> d.object_id  -- that isn't a self-reference (self-references don't use object name)
MSSQL2005表重命名sp_rename
   -- filter dependencies where the dependent object d.object_id is a date correlation view.
MSSQL2005表重命名sp_rename
   AND 0 = Isnull((select is_date_correlation_view from sys.views o where o.object_id =  d.object_id), 0)
MSSQL2005表重命名sp_rename   
-- And isn't a reference from a child object (also don't use object name)   
MSSQL2005表重命名sp_rename
   -- As we might not have permission on the dependent object, we list all the child
MSSQL2005表重命名sp_rename
   -- objects of the object to be renamed and make sure that child object id is not the depending object here.
MSSQL2005表重命名sp_rename
   AND 0 = (select count(*from sys.objects o where o.parent_object_id = @objid and o.object_id = d.object_id)
MSSQL2005表重命名sp_rename   )
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15336,-1,-1@objname)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- WITH DEFERRED RESOLUTION, sql_dependencies  IS NOT VERY ACCURATE, SO WE ALSO
MSSQL2005表重命名sp_rename
 -- RAISE THIS WARNING **UNCONDITIONALLY**, EVEN FOR NON-OBJECT RENAMES
MSSQL2005表重命名sp_rename
 raiserror(15477,-1,-1)
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- warn about dependencies...
MSSQL2005表重命名sp_rename
 if (@objtype = 'objects'
MSSQL2005表重命名sp_rename  
and exists (select * from sys.sql_dependencies d where 
MSSQL2005表重命名sp_rename      d.referenced_major_id 
= @objid
MSSQL2005表重命名sp_rename      
-- filter dependencies where the dependent object d.object_id is a date correlation view.
MSSQL2005表重命名sp_rename
      AND 0 = Isnull((select is_date_correlation_view from sys.views o where o.object_id =  d.object_id), 0)
MSSQL2005表重命名sp_rename      ))
MSSQL2005表重命名sp_rename  
raiserror(15337,-1,-1)
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
--------------------------------------------------------------------------
MSSQL2005表重命名sp_rename
 ---------------------  PHASE 40:  Update system tables  ------------------
MSSQL2005表重命名sp_rename
 --------------------------------------------------------------------------
MSSQL2005表重命名sp_rename

MSSQL2005表重命名sp_rename 
-- DO THE UPDATES --
MSSQL2005表重命名sp_rename
 if (@objtype = 'userdatatype')      -------- change type name
MSSQL2005表重命名sp_rename
 begin
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
EXEC %%ScalarType(ID = @xusertype).SetName(Name = @newname)
MSSQL2005表重命名sp_rename  
if @@error <> 0
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15335,-1,-1,@newname,@objtypeIN)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename 
else if (@objtype = 'object')      -------- change object name
MSSQL2005表重命名sp_rename
 begin
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- update the object name
MSSQL2005表重命名sp_rename
  EXEC %%Object(ID = @objid).SetName(Name = @newname)
MSSQL2005表重命名sp_rename  
if @@error <> 0
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15335,-1,-1,@newname,@objtypeIN)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename 
else if (@objtype = 'index')      -------- change index name
MSSQL2005表重命名sp_rename
 begin
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename  
-- update the index name, and change object name if cnst
MSSQL2005表重命名sp_rename
  EXEC %%IndexOrStats(ObjectID = @objid, Name = @UnqualOldName).SetName(Name = @newname)
MSSQL2005表重命名sp_rename  
if @@error <> 0
MSSQL2005表重命名sp_rename  
begin
MSSQL2005表重命名sp_rename   
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename   
raiserror(15335,-1,-1,@newname,@objtypeIN)
MSSQL2005表重命名sp_rename   
return 1
MSSQL2005表重命名sp_rename  
end
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename 
else if (@objtype = 'column')      -------- change column name
MSSQL2005表重命名sp_rename
 begin
MSSQL2005表重命名sp_rename  
-- Use DBCC to check for column in use by check-constraint, computed-column, etc
MSSQL2005表重命名sp_rename
  -- THIS IS NOT A DOCUMENTED DBCC: DO NOT USE DIRECTLY!
MSSQL2005表重命名sp_rename
  DBCC RENAMECOLUMN ( @OwnAndObjName@UnqualOldName@newname )
MSSQL2005表重命名sp_rename 
end
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
COMMIT TRANSACTION
MSSQL2005表重命名sp_rename
MSSQL2005表重命名sp_rename 
-- Success --
MSSQL2005表重命名sp_rename
 return 0 -- sp_rename
MSSQL2005表重命名sp_rename
 
MSSQL2005表重命名sp_rename