Last active
October 23, 2015 09:27
-
-
Save ststeiger/ba24f1648668973ab8db to your computer and use it in GitHub Desktop.
Adding a primary key to table in a fault-tolerant manner
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) | |
| ; | |
| 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