SQL Server SP, Fungsi, Lihat penghitung baris sumber

Apakah ada utilitas yang tersedia untuk menghitung total baris Prosedur Tersimpan, Fungsi, Tampilan dalam Database yang dibuat pengguna?


person Rajganesh Mountbatton    schedule 13.07.2009    source 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...

person gbn    schedule 13.07.2009
comment
entah bagaimana solusi saya menghasilkan jawaban yang berbeda dengan jawaban Anda. - person Sam Saffron; 13.07.2009
comment
Terima kasih gbn & Sam atas balasan Anda. Mencoba judul stackoverflow.com/questions/291574/. Ketiganya memberikan hasil yang berbeda. Yang mana yang perlu dipertimbangkan? - person Rajganesh Mountbatton; 13.07.2009
comment
@Sam: satu perbedaan tanpa mengecualikan filter diagram! @Rajganesh: Solusi lain tidak termasuk pemicu dan tampilan, ketik V dan TR,. Hapus filter xtype dan selesai. - person gbn; 13.07.2009
comment
...tetapi ini juga mencakup batasan pemeriksaan dan memberikan -1 jumlah baris untuk ini - person gbn; 13.07.2009

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
person Sam Saffron    schedule 13.07.2009