Apakah ada utilitas yang tersedia untuk menghitung total baris Prosedur Tersimpan, Fungsi, Tampilan dalam Database yang dibuat pengguna?
SQL Server SP, Fungsi, Lihat penghitung baris sumber
Jawaban (2)
Untuk SQL Server 2005 dan 2008.
Ini mencakup semua kode termasuk baris kosong dan baris kosong di belakangnya, tetapi bukan baris terakhir (tanpa CRLF). Jadi itu rata-rata... tapi itu akan selalu menjadi perkiraan.
WITH CRLF AS
(
SELECT
CHARINDEX('
', definition) AS CRLF,
SM.[object_ID]
FROM
sys.sql_modules SM
WHERE
OBJECT_NAME([object_ID]) not in ('fn_diagramobjects', 'sp_alterdiagram', 'sp_creatediagram', 'sp_dropdiagram', 'sp_helpdiagramdefinition', 'sp_helpdiagrams', 'sp_renamediagram', 'sp_upgraddiagrams', 'sysdiagrams')
UNION ALL
SELECT
CHARINDEX('
', definition, C.CRLF + 2),
SM.[object_ID]
FROM
sys.sql_modules SM
JOIN
CRLF C ON SM.[object_ID] = C.[object_ID]
WHERE
CHARINDEX('
', definition, C.CRLF + 2) > C.CRLF
)
SELECT
COUNT(*)
FROM
CRLF
OPTION
(MAXRECURSION 0)
Sunting: Anda mungkin memerlukan OBJECTPROPERTY(SM.[object_ID], 'IsMSShipped') = 0
atau pengecualian secara eksplisit untuk kode diagram, dll
Sunting 2:
Dari solusi lain di jawaban lain, dikoreksi agar tidak memberikan "-1" untuk batasan pemeriksaan dan menerapkan filter/tipe yang sama
select t.sp_name, sum(t.lines_of_code) as lines_ofcode, t.type_desc
from
(
select o.name as sp_name,
(len(c.text) - len(replace(c.text, char(13), ''))) as lines_of_code,
case when o.xtype = 'P' then 'Stored Procedure'
when o.xtype in ('FN', 'IF', 'TF') then 'Function'
end as type_desc
from sysobjects o
inner join syscomments c
on c.id = o.id
where --o.xtype in ('V', 'P', 'FN', 'IF', 'TF', 'TR')
--and
o.category = 0
AND
o.name not in ('fn_diagramobjects', 'sp_alterdiagram', 'sp_creatediagram', 'sp_dropdiagram', 'sp_helpdiagramdefinition', 'sp_helpdiagrams', 'sp_renamediagram', 'sp_upgraddiagrams', 'sysdiagrams')
) t
group by t.sp_name, t.type_desc
order by 1
COMPUTE SUM (sum(t.lines_of_code))
Semuanya memberikan hasil yang sama di sini di beberapa database. misalnya 4607 untuk database ReportServer SQL Server 2005 SP2...
Saya tidak mengetahuinya, tetapi Anda dapat melihat-lihat hal-hal di sysobjects dan menjalankan sp_helptext
pada setiap proses dan melihat serta menghitung baris baru.
Jika Anda menginginkan solusi berbasis non CTE, Anda dapat melakukan sesuatu seperti ini:
select sum(newlines) from ( select newlines = (datalength(definition) - datalength(replace(definition, ' ', ' '))) / 2 from sys.sql_modules ) as a