====== How much code have I written? ======
This script iterates through a specified set of database code objects (SPs, views, functions etc) and uses a temporary SP (''[[##usp_GetCodeLines]]'') to report the number of lines of code in each object's definition.
DECLARE @sql VARCHAR(MAX) = 'DECLARE @objs TABLE (
DbName VARCHAR(128)
, SchemaName VARCHAR(128)
, ObjName VARCHAR(128)
)'
SELECT @sql += '
INSERT INTO @objs (
DbName
, SchemaName
, ObjName
)
SELECT
''' + name + '''
, s.name
, o.name
FROM [' + name + '].sys.objects o
INNER JOIN [' + name + '].sys.schemas s ON s.schema_id = o.schema_id
WHERE o.[type] IN (''P'', ''V'')'
FROM sys.databases
--WHERE name NOT IN ('master', 'msdb', 'model', 'tempdb')
--AND name NOT LIKE ('zz%')
WHERE name LIKE '%_Stg' OR name LIKE '%_Ifx' OR name LIKE '%_ID'
SET @sql += '
SELECT * FROM @objs'
DECLARE @objs TABLE (
DbName VARCHAR(128)
, SchemaName VARCHAR(128)
, ObjName VARCHAR(128)
, LinesOfCode INT DEFAULT 0
)
INSERT INTO @objs (
DbName
, SchemaName
, ObjName
)
EXEC(@sql)
DECLARE @dbName VARCHAR(128)
DECLARE @objSchema VARCHAR(128)
DECLARE @objName VARCHAR(128)
DECLARE @rows INT = 0
WHILE 1 = 1
BEGIN
SELECT TOP 1
@dbName = DbName
, @objSchema = SchemaName
, @objName = ObjName
FROM @objs
WHERE LinesOfCode = 0
IF @@ROWCOUNT = 0 BREAK
IF @dbName = NULL
BREAK
EXEC @rows = #usp_GetCodeLines @dbName, @objSchema, @objName
UPDATE @objs
SET LinesOfCode = @rows
WHERE DbName = @dbName
AND SchemaName = @objSchema
AND ObjName = @objName
SET @dbName = NULL
END
SELECT *
FROM @objs
===== #usp_GetCodeLines =====
USE [master]
GO
IF OBJECT_ID('tempdb..#usp_GetCodeLines') IS NOT NULL
DROP PROCEDURE #usp_GetCodeLines
GO
CREATE PROCEDURE #usp_GetCodeLines (
@dbName VARCHAR(128)
, @objSchema VARCHAR(128)
, @objName VARCHAR(128)
)
AS
BEGIN
SET NOCOUNT ON
DECLARE @code TABLE (
Line VARCHAR(MAX)
)
INSERT INTO @code
EXEC('[' + @dbName + '].dbo.sp_helptext N''[' + @objSchema + '].[' + @objName + ']''')
RETURN @@ROWCOUNT
END
{{tag> tsql dynamic development}}