dbTalk Databases Forums  

WHat's the origin of this Stored Procedure?

comp.databases.ms-access comp.databases.ms-access


Discuss WHat's the origin of this Stored Procedure? in the comp.databases.ms-access forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
lyle fairfield
 
Posts: n/a

Default WHat's the origin of this Stored Procedure? - 04-23-2009 , 06:03 AM






Currently I am working on a project that at one time required defaulting
all relationship constraints in a sql-server database to "cascade
delete". I used a stored procedure to do so.

This morning I modified the procedure to include "cascade update". Now I
am trying to determine the origin of the older procedure.
Did I create it from scratch?
Did I borrow it from someone and forget to note the creator properly?
Did I modify it from one generally known and used?
I try to make attributions carefully both in fairness and because
knowledge of the origin and creator of a procedure can help understand
and work with it.

This is the modified procedure. Can you identify the origin of it or any
part of it?

BTW, it's really clumsy because, TTBOMK, SQL-Server has no SQL capability
for modifying constraints; modification is accomplished through dropping
and recreation.

CREATE PROCEDURE [dbo].[Default_REFERENTIAL_CONSTRAINTS_TO_Cascade]

AS
DECLARE @Constraint_Name varchar(255)
DECLARE @Table_Name varchar(255)
DECLARE @Column_Name varchar(255)
DECLARE @Referenced_Table varchar(255)
DECLARE @Referenced_Column varchar(255)
DECLARE @SQLDrop varchar(255)
DECLARE @SQLAdd varchar(255)
DECLARE @SQL1 varchar(255)
DECLARE @SQL2 varchar(255)
DECLARE @Transaction varchar(255)

SET @Transaction='Transaction1'
SET @SQLDrop = 'ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME'
SET @SQLADD = 'ALTER TABLE TABLE_NAME
ADD CONSTRAINT CONSTRAINT_NAME
FOREIGN KEY (COLUMN_NAME)
REFERENCES REFERENCED_TABLE(REFERENCED_COLUMN)
ON DELETE CASCADE
ON UPDATE CASCADE'

DECLARE NON_CASCADE_FOREIGN_KEYS CURSOR FOR

SELECT RC.CONSTRAINT_NAME,
CCU.TABLE_NAME,
CCU.COLUMN_NAME AS Column_Name,
SO_1.Name AS Referenced_Table,
C.COLUMN_NAME as Referenced_Column
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC
LEFT OUTER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS CCU
ON RC.CONSTRAINT_NAME=CCU.CONSTRAINT_NAME
LEFT OUTER JOIN
sys.objects AS SO
ON RC.CONSTRAINT_NAME=SO.NAME
LEFT OUTER JOIN
sys.foreign_key_columns AS fkc
ON SO.OBJECT_ID=fkc.constraint_object_ID
LEFT OUTER JOIN
sys.objects AS SO_1
ON fkc.referenced_object_id=SO_1.OBJECT_ID
LEFT OUTER JOIN
INFORMATION_SCHEMA.COLUMNS C
ON SO_1.Name=C.Table_Name
AND
fkc.referenced_column_id=C.ORDINAL_POSITION
WHERE RC.DELETE_RULE != 'CASCADE'
OR RC.UPDATE_RULE != 'CASCADE'

OPEN NON_CASCADE_FOREIGN_KEYS

FETCH NEXT From NON_CASCADE_FOREIGN_KEYS
INTO
@Constraint_Name,
@Table_Name,
@Column_Name,
@Referenced_Table,
@Referenced_Column

WHILE @@FETCH_STATUS = 0

BEGIN

SET @SQL1 = REPLACE(@SQLDrop, 'CONSTRAINT_NAME', @Constraint_Name)
SET @SQL1 = REPLACE(@SQL1, 'TABLE_NAME', @Table_Name)

SET @SQL2 = REPLACE(@SQLAdd, 'CONSTRAINT_NAME', @Constraint_Name)
SET @SQL2 = REPLACE(@SQL2, 'TABLE_NAME', @Table_Name)
SET @SQL2 = REPLACE(@SQL2, 'COLUMN_NAME', @Column_Name)
SET @SQL2 = REPLACE(@SQL2, 'REFERENCED_TABLE', @Referenced_Table)
SET @SQL2 = REPLACE(@SQL2, 'REFERENCED_COLUMN', @Referenced_Column)

BEGIN TRANSACTION @Transaction

BEGIN TRY
EXECUTE (@SQL1)
EXECUTE (@SQL2)
COMMIT TRANSACTION @Transaction
END TRY

BEGIN CATCH
SELECT @Constraint_Name + ' modification failed'
ROLLBACK TRANSACTION @Transaction
END CATCH

FETCH NEXT From NON_CASCADE_FOREIGN_KEYS
INTO
@Constraint_Name,
@Table_Name,
@Column_Name,
@Referenced_Table,
@Referenced_Column

END

CLOSE NON_CASCADE_FOREIGN_KEYS
DEALLOCATE NON_CASCADE_FOREIGN_KEYS

--
lyle fairfield

- The man who told us that Canada wouldn't go there has now told us that
Canada will be the first to come back. How reassuring!

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.