Important alert: (current site time 7/15/2013 7:19:19 PM EDT)
 

VB icon

Easy Drop and ReBuild Constraints with an SP

Email
Submitted on: 4/15/2002 6:21:06 AM
By: Zoltan Tamas, Toth 
Level: Advanced
User Rating: By 1 Users
Compatibility: SQL Server 7.0
Views: 11760
author picture
(About the author)
 
     This code is generating an SQL script, that drop or build referentials.
 
code:
Can't Copy and Paste this?
Click here for a copy-and-paste friendly version of this code!
 
Terms of Agreement:   
By using this code, you agree to the following terms...   
  1. You may use this code in your own programs (and may compile it into a program and distribute it in compiled format for languages that allow it) freely and with no charge.
  2. You MAY NOT redistribute this code (for example to a web site) without written permission from the original author. Failure to do so is a violation of copyright laws.   
  3. You may link to this code from another website, but ONLY if it is not wrapped in a frame. 
  4. You will abide by any additional copyright restrictions which the author may have placed in the code or code's description.
				
--**************************************
-- Name: Easy Drop and ReBuild Constraints with an SP
-- Description:This code is generating an SQL script, that drop or build referentials.
-- By: Zoltan Tamas, Toth
--
-- Inputs:Table name and a flag.
The flag determines, that the constraint should drop or rebuild.
Example:
Generate DROP constraints script:
EXEC sp_Drop_Or_Rebuild_Refs
 @i_Table_Name = 'Employee',
 @i_Is_Drop = 1
Generate Build constraints script:
EXEC sp_Drop_Or_Rebuild_Refs
 @i_Table_Name = 'Employee',
 @i_Is_Drop = 0
--
-- Returns:SP returns the SQL script like:
"ALTER TABLE table_name DROP CONSTRAINT constraint_name
go"....etc..
If you want to generate an "Rebuild" script from your referentials, you must generate the script before you drop the constraints.
--
--This code is copyrighted and has-- limited warranties.Please see http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=440&lngWId=5--for details.--**************************************

--------------------
-- //////////////////
-- // w_Contraints //
-- //////////////////
IF EXISTS( SELECT Id FROM SysObjects WHERE Name = N'w_Contraints' AND type = 'V' ) 
 DROP VIEW w_Contraints
GO
CREATE VIEW w_Contraints
AS
SELECT 
 o1.name AS Constraint_Name,
 om.name AS Master_Table_Name,
 cm.Name AS Master_Field_Name,
 od.name AS Detail_Table_Name,
 cd.Name AS Detail_Field_Name
FROM 
 sysobjects AS o
 JOIN sysreferences AS sr ON( 
( sr.rkeyid = o.ID ) -- OR ( sr.fkeyid = o.ID ) -- ha a felfelé induló relációk is érdekelnek
 )
 JOIN sysobjects AS o1 ON( o1.ID = sr.constid )
 JOIN sysobjects AS od ON( od.ID = sr.fkeyid )
 JOIN sysobjects AS om ON( om.ID = sr.rkeyid )
 JOIN syscolumns AS cm ON( cm.ID = om.ID AND cm.colid = sr.rkey1 )
 JOIN syscolumns AS cd ON( cd.ID = od.ID AND cd.colid = sr.fkey1 )
GO
GRANT SELECT ON w_Contraints TO PUBLIC
GO
--------------------------------------------------
-- /////////////////////////////
-- // sp_Drop_Or_Rebuild_Refs //
-- /////////////////////////////
IF EXISTS( SELECT Id FROM SysObjects WHERE Name = N'sp_Drop_Or_Rebuild_Refs' AND type = 'P' ) 
 DROP PROCEDURE sp_Drop_Or_Rebuild_Refs
GO
CREATE PROCEDURE sp_Drop_Or_Rebuild_Refs
 @i_Table_Name nvarchar(255),
 @i_Is_Drop int
AS
 SET NOCOUNT ON
/*SELECT 
 o1.name AS Constraint_Name,
 om.name AS Master_Table_Name,
 cm.Name AS Master_Field_Name,
 od.name AS Detail_Table_Name,
 cd.Name AS Detail_Field_Name
FROM 
 sysobjects AS o
 JOIN sysreferences AS sr ON( 
( sr.rkeyid = o.ID ) -- OR ( sr.fkeyid = o.ID ) -- ha a felfelé induló relációk is érdekelnek
 )
 JOIN sysobjects AS o1 ON( o1.ID = sr.constid )
 JOIN sysobjects AS od ON( od.ID = sr.fkeyid )
 JOIN sysobjects AS om ON( om.ID = sr.rkeyid )
 JOIN syscolumns AS cm ON( cm.ID = om.ID AND cm.colid = sr.rkey1 )
 JOIN syscolumns AS cd ON( cd.ID = od.ID AND cd.colid = sr.fkey1 )
WHERE 
 o.Name = 'categories'
*/
if @i_Is_Drop = 1 begin
 SELECT 
'ALTER TABLE ' + Detail_Table_Name + ' DROP CONSTRAINT ' + Constraint_Name + '
go'
 FROM 
w_Contraints
 WHERE 
Master_Table_Name = @i_Table_Name
end else begin
 SELECT 
'ALTER TABLE ' + Detail_Table_Name + '
 ADD CONSTRAINT ' + Constraint_Name + ' FOREIGN KEY (
' + Master_Field_Name + '
 ) REFERENCES ' + Master_Table_Name + ' (
' + Detail_Field_Name + '
 )
go'
 FROM 
w_Contraints
 WHERE 
Master_Table_Name = @i_Table_Name
end
 RETURN( 0 )
GO
GRANT EXECUTE ON sp_Drop_Or_Rebuild_Refs TO Public
GO
---------
--Example:
--EXEC sp_Drop_Or_Rebuild_Refs
-- @i_Table_Name = 'Employee',
-- @i_Is_Drop = 0


Other 7 submission(s) by this author

 


Report Bad Submission
Use this form to tell us if this entry should be deleted (i.e contains no code, is a virus, etc.).
This submission should be removed because:

Your Vote

What do you think of this code (in the Advanced category)?
(The code with your highest vote will win this month's coding contest!)
Excellent  Good  Average  Below Average  Poor (See voting log ...)
 

Other User Comments
11/11/2005 3:01:53 PMMarcio

Code is great, but the add constraint needs tiny adjustment to:
'ALTER TABLE ' + Detail_Table_Name + '
ADD CONSTRAINT ' + Constraint_Name + ' FOREIGN KEY (
' + Detail_Field_Name + '
) REFERENCES ' + Master_Table_Name + ' (
' + Master_Field_Name

Now it will work like a charm.
(If this comment was disrespectful, please report it.)

 

Add Your Feedback
Your feedback will be posted below and an email sent to the author. Please remember that the author was kind enough to share this with you, so any criticisms must be stated politely, or they will be deleted. (For feedback not related to this particular code, please click here instead.)
 

To post feedback, first please login.