I have a little utility very similar:
SET NOCOUNT ON;
GO
DECLARE @UntrustedConstraints TABLE (
DatabaseName SYSNAME NOT NULL,
SchemaName SYSNAME NOT NULL,
TableName SYSNAME NOT NULL,
ConstraintName SYSNAME NOT NULL,
IsDisabled BIT NOT NULL,
ConstraintType VARCHAR(2) NOT NULL,
AlterSQL AS (
'USE ' + QUOTENAME(DatabaseName)
+ '; ALTER TABLE ' + QUOTENAME(SchemaName) + '.' + QUOTENAME(TableName)
+ ' WITH CHECK '
+ CASE WHEN IsDisabled = 1 THEN 'NO' ELSE '' END
+ 'CHECK CONSTRAINT ' + QUOTENAME(ConstraintName) + ';'
+ CHAR(13) + CHAR(10) + 'GO'
)
);
DECLARE @sql NVARCHAR(MAX) = '
USE [?];
IF DB_NAME() IN (''master'', ''model'', ''msdb'', ''tempdb'') RETURN;
WITH UntrustedConstraints (DatabaseName, SchemaName, TableName, ConstraintName, IsDisabled, ConstraintType)
AS (
SELECT DB_NAME(), s.name, t.name, i.name, is_disabled, ''FK''
FROM sys.foreign_keys i
INNER JOIN sys.tables t
ON i.parent_object_id = t.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE i.is_not_trusted = 1
AND i.is_not_for_replication = 0
AND t.is_ms_shipped = 0
UNION
SELECT DB_NAME(), s.name, t.name, c.name, is_disabled, ''C''
FROM sys.check_constraints c
INNER JOIN sys.tables t
ON c.parent_object_id = t.object_id
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE c.is_not_trusted = 1
AND c.is_not_for_replication = 0
AND t.is_ms_shipped = 0
)
SELECT DatabaseName, SchemaName, TableName, ConstraintName, IsDisabled, ConstraintType
FROM UntrustedConstraints;
';
INSERT INTO @UntrustedConstraints (DatabaseName, SchemaName, TableName, ConstraintName, IsDisabled, ConstraintType)
EXEC sp_MSforeachdb @command1=@sql;
SELECT * FROM @UntrustedConstraints
ORDER BY IsDisabled DESC, DatabaseName, SchemaName, TableName, ConstraintName;
This also addresses check constraints. I just run it in grid mode, copy the statements, and do a regex replace all to get the GO on a separate line.