exec sp_MSforeachdb 'select top 1 * from syscomments'
Checks each database for the query in the string..
[\d_a-zA-Z]{4,12} Need more info on Injection attacks?

create PROCEDURE [DBO].P_COMPARE_DEV_PROD
AS
DECLARE @REPORT TABLE
(
MESSAGE VARCHAR(500)
)
CREATE TABLE #report
(
data varchar(100),
counts FLOAT
)
DECLARE @CNTABLE TABLE
(
C_NAME VARCHAR(100)
)
INSERT @CNTABLE
SELECT 'dtproperties'
DECLARE C CURSOR
FOR
select TABLE_NAME
from INFORMATION_SCHEMA.tables
where table_type = 'BASE TABLE'
AND TABLE_NAME NOT IN (SELECT C_NAME FROM @CNTABLE)
OPEN C
DECLARE @TBL_NAME VARCHAR(100)
Fetch NEXT FROM c INTO @TBL_NAME
While (@@FETCH_STATUS <> -1)
BEGIN
DECLARE @FL VARCHAR(5000)
SET @FL = 'SELECT ''' + @TBL_NAME + ''',COUNT(*) FROM [' + @TBL_NAME + '] '
DECLARE I CURSOR
FOR SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE NUMERIC_SCALE IS NOT NULL
AND COLUMN_NAME NOT LIKE '%ID'
AND TABLE_NAME = @TBL_NAME
DECLARE @COL_NM VARCHAR(100)
OPEN I
Fetch NEXT FROM I INTO @COL_NM
While (@@FETCH_STATUS <> -1)
BEGIN
SET @FL = @FL + ' UNION ALL '
SET @FL = @fl + 'SELECT ''' + @TBL_NAME + '.'+@COL_NM+''',SUM([' + @COL_NM + ']) FROM [' + @TBL_NAME + '] '
Fetch NEXT FROM I INTO @COL_NM
END
CLOSE I
DEALLOCATE I
--PRINT @FL
INSERT #REPORT
EXEC(@FL)
Fetch NEXT FROM c INTO @TBL_NAME
END
CLOSE C
DEALLOCATE C
CREATE TABLE #report2
(
data varchar(100),
counts FLOAT
)
DECLARE C CURSOR
FOR
select TABLE_NAME
from [Your Production Database].INFORMATION_SCHEMA.tables
where table_type = 'BASE TABLE'
AND TABLE_NAME NOT IN (SELECT C_NAME FROM @CNTABLE)
OPEN C
Fetch NEXT FROM c INTO @TBL_NAME
While (@@FETCH_STATUS <> -1)
BEGIN
SET @FL = 'SELECT ''' + @TBL_NAME + ''',COUNT(*) FROM [Your Production Database].[DBO].[' + @TBL_NAME + '] '
DECLARE I CURSOR
FOR SELECT COLUMN_NAME
FROM [Your Production Database].INFORMATION_SCHEMA.COLUMNS
WHERE NUMERIC_SCALE IS NOT NULL
AND COLUMN_NAME NOT LIKE '%ID'
AND TABLE_NAME = @TBL_NAME
OPEN I
Fetch NEXT FROM I INTO @COL_NM
While (@@FETCH_STATUS <> -1)
BEGIN
SET @FL = @FL + ' UNION ALL '
SET @FL = @fl + 'SELECT ''' + @TBL_NAME + '.'+@COL_NM+''',SUM([' + @COL_NM + ']) FROM [Your Production Database].[DBO].[' + @TBL_NAME + '] '
Fetch NEXT FROM I INTO @COL_NM
END
CLOSE I
DEALLOCATE I
--PRINT @FL
INSERT #REPORT2
EXEC(@FL)
Fetch NEXT FROM c INTO @TBL_NAME
END
CLOSE C
DEALLOCATE C
SELECT * INTO #MY_REPORT
FROM
(
SELECT P.DATA [TABLE_NAME], CONVERT(VARCHAR(50),ISNULL(P.COUNTS,0.00)) [PRODUCTION_CNT],
CASE WHEN CONVERT(VARCHAR(15),ISNULL(D.COUNTS,-1)) = '-1'
THEN 'MISSING'
ELSE CONVERT(VARCHAR(15),ISNULL(D.COUNTS,-1))
END AS [DEV_CNT]
FROM #REPORT2 P
LEFT OUTER JOIN #REPORT D
ON D.DATA = P.DATA
UNION ALL
SELECT D.DATA,'MISSING',CONVERT(VARCHAR(50),D.COUNTS)
FROM #REPORT2 D
WHERE D.DATA NOT IN
(
SELECT TABLE_NAME FROM
(
SELECT P.DATA [TABLE_NAME], P.COUNTS [PRODUCTION_CNT],ISNULL(D.COUNTS,-1) [DEV_CNT]
FROM #REPORT2 P
LEFT OUTER JOIN #REPORT D
ON D.DATA = P.DATA
)Q
)
) Q
ORDER BY 1 ASC
--INSERT DATA DESCREPANCIES
INSERT @REPORT
SELECT 'ROW COUNT DESREPANCIES :'
UNION ALL
SELECT '--------------------------------------'
UNION ALL
SELECT TABLE_NAME + ' IN PRODUCTION(NET): ' + PRODUCTION_CNT + ' IN DEV(NET): ' + DEV_CNT
FROM #MY_REPORT
WHERE TABLE_NAME NOT LIKE '%.%'
AND PRODUCTION_CNT != DEV_CNT
UNION ALL
SELECT 'DATA(NUMERIC ONLY) DISCREPANCIES'
UNION ALL
SELECT '--------------------------------------'
UNION ALL
SELECT TABLE_NAME + ' IN PRODUCTION(NET): ' + PRODUCTION_CNT + ' IN DEV(NET): ' + DEV_CNT
FROM #MY_REPORT
WHERE TABLE_NAME LIKE '%.%'
AND PRODUCTION_CNT != DEV_CNT
AND DEV_CNT != 'MISSING'
AND PRODUCTION_CNT != 'MISSING'
UNION ALL
SELECT 'SCHEMA DESCREPANCIES DISCREPANCIES'
UNION ALL
SELECT '--------------------------------------'
UNION ALL
SELECT 'COLUMN: TABLE_NAME '+ TABLE_NAME + ' IS MISSING FROM PRODUCTION, BUT EXISTS IN DEV'
FROM #MY_REPORT
WHERE TABLE_NAME LIKE '%.%'
AND PRODUCTION_CNT != DEV_CNT
AND PRODUCTION_CNT LIKE '%MISSING%'
UNION ALL
SELECT 'COLUMN: TABLE_NAME '+ TABLE_NAME + ' IS MISSING FROM DEV, BUT EXISTS IN PRODUCTION'
FROM #MY_REPORT
WHERE TABLE_NAME LIKE '%.%'
AND PRODUCTION_CNT != DEV_CNT
AND DEV_CNT LIKE '%MISSING%'
SELECT * FROM @REPORT
DROP TABLE #REPORT
DROP TABLE #REPORT2
drop table #MY_REPORT
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO