In my previous post, I mentioned that system-named objects get arbitrary names (like, "PK__Executio__05F5D74515DA3E5D"), and that this makes comparing database schemas difficult. To fix this problem, you have to rename the offending constraints, and to do that, you have to find them. So, this script displays all the system-named constraints in all the databases.
-- Display all the system-named constraints in all user databases.
DECLARE @Sql NVARCHAR(MAX)
SET @Sql = 'USE [?] ' + CHAR(10)
+ CHAR(10)
+ 'IF DB_ID() > 4 ' + CHAR(10)
+ ' AND EXISTS (SELECT * FROM sys.key_constraints WHERE is_system_named = 1) ' + CHAR(10)
+ CHAR(10)
+ ' SELECT ''?'' AS ''Database'' ' + CHAR(10)
+ ' , OBJECT_NAME(parent_object_id) AS ''Table'' ' + CHAR(10)
+ ' , name AS ''Constraint'' ' + CHAR(10)
+ ' FROM sys.key_constraints ' + CHAR(10)
+ ' WHERE is_system_named = 1'
PRINT @Sql
EXEC sp_MSforeachdb @sql
The results will look something like this:
Database Table Constraint ReportServer ExecutionLogStorage PK__Executio__05F5D74515DA3E5D
0 comments:
Post a Comment