Created
October 23, 2015 09:27
-
-
Save ststeiger/deb8ec5c0c4ac88d68f5 to your computer and use it in GitHub Desktop.
Fault-tolerant adding of foreign_key
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| IF 0 < ( | |
| SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES | |
| WHERE TABLE_TYPE = 'BASE TABLE' | |
| AND TABLE_SCHEMA = 'dbo' | |
| AND TABLE_NAME = 'T_SYS_Language_Forms' | |
| ) | |
| BEGIN | |
| -- Check for NULL values in the primary-key column | |
| IF 0 = (SELECT COUNT(*) FROM T_SYS_Language_Forms WHERE LANG_UID IS NULL) | |
| BEGIN | |
| ALTER TABLE T_SYS_Language_Forms ALTER COLUMN LANG_UID uniqueidentifier NOT NULL | |
| -- Drop PK if exists | |
| -- ALTER TABLE T_SYS_Language_Forms DROP CONSTRAINT pk_constraint_name | |
| --DECLARE @pkDropCommand nvarchar(1000) | |
| --SET @pkDropCommand = N'ALTER TABLE T_SYS_Language_Forms DROP CONSTRAINT ' + QUOTENAME((SELECT CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS | |
| --WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' | |
| --AND TABLE_SCHEMA = 'dbo' | |
| --AND TABLE_NAME = 'T_SYS_Language_Forms' | |
| ----AND CONSTRAINT_NAME = 'PK_T_SYS_Language_Forms' | |
| --)) | |
| ---- PRINT @pkDropCommand | |
| --EXECUTE(@pkDropCommand) | |
| -- Check if they keys are unique | |
| IF 1 >= (SELECT TOP 1 COUNT(*) AS cnt FROM T_SYS_Language_Forms GROUP BY LANG_UID ORDER BY cnt DESC) | |
| BEGIN | |
| -- If no Primary key for this table | |
| IF 0 = | |
| ( | |
| SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS | |
| WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' | |
| AND TABLE_SCHEMA = 'dbo' | |
| AND TABLE_NAME = 'T_SYS_Language_Forms' | |
| -- AND CONSTRAINT_NAME = 'PK_T_SYS_Language_Forms' | |
| ) | |
| ALTER TABLE T_SYS_Language_Forms ADD CONSTRAINT PK_T_SYS_Language_Forms PRIMARY KEY CLUSTERED (LANG_UID ASC) | |
| ; | |
| -- Adding foreign key | |
| IF 0 = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME = 'FK_T_ZO_SYS_Language_Forms_T_SYS_Language_Forms') | |
| ALTER TABLE T_ZO_SYS_Language_Forms WITH NOCHECK ADD CONSTRAINT FK_T_ZO_SYS_Language_Forms_T_SYS_Language_Forms FOREIGN KEY(ZOLANG_LANG_UID) REFERENCES T_SYS_Language_Forms(LANG_UID); | |
| END -- End uniqueness check | |
| ELSE | |
| PRINT 'FSCK, this column has duplicate keys, and can thus not be changed to primary key...' | |
| END -- End NULL check | |
| ELSE | |
| PRINT 'FSCK, need to figure out how to update NULL value(s)...' | |
| END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment