Lowell, Thanks for this, you saved me a bunch of work this week. I had a couple vendor installed databases that had wrong collation. I was able to use your script to fix them. A few issues I ran across testing your script:
1)Doubling of nvarchar size - I see you were already notifed on this so won't go into detail
2)Foreign Key creation - I had several foreign keys that were set up with ON DELETE CASCADE. This was lost on your rebuild of the foreign key constraint. I add the following code to the end of the select that builds the statement to fix:
+ CASE
WHEN conz.delete_referential_action = 1
THEN ' ON DELETE CASCADE'
ELSE ''
END
3)Index Creation - I had issues with unique indexes that were built using a create index statement vs a unique constraint. Also had issues with clustered indexes that were not set up as a primary key. Your create index build would only create non-unique, nonclustered indexes. In your
/*pre-quel sequel to gather the data:*/ Select I changed the following code:
ELSE 'CREATE INDEX ' + +QUOTENAME(index_name) + ' ON ' + +QUOTENAME(SCHEMA_NAME) + '.' + QUOTENAME(OBJECT_NAME) + ' (' + index_columns_key + ')'
To Be:
ELSE 'CREATE '
+ CASE
WHEN is_unique = 1
THEN 'UNIQUE '
ELSE ''
END
+ CASE
WHEN index_id = 1
THEN 'CLUSTERED '
ELSE ''
END
+ 'INDEX ' + +QUOTENAME(index_name) + ' ON ' + +QUOTENAME(SCHEMA_NAME) + '.' + QUOTENAME(OBJECT_NAME) + ' (' + index_columns_key + ')'
Thanks again