通过以下脚本,我可以获取数据库中所有存储过程的结果:
SELECT sm.id, OBJECT_NAME(sm.id) AS object_name, sm.text
FROM syscomments AS sm
JOIN sysobjects AS so ON sm.id = so.id
WHERE (so.status >= 0) AND (so.xtype = 'P')
我希望每个存储过程只返回一行。表syscomments中的文本字段是nvarchar 4000。因此,一个方法可能会被分成多个记录存储。问题在于,我有一些存储过程超过15000个字符。
识别使用多个记录的存储过程
SELECT sm.id, COUNT(sm.colid) AS Cantidad
INTO #SPrepeated
FROM syscomments AS sm INNER JOIN
sysobjects AS so ON sm.id = so.id
WHERE (so.status >= 0) AND (so.xtype = 'P') AND (so.category = 0)
GROUP BY sm.id, so.name
HAVING (COUNT(sm.colid) > 1)
SELECT sm.id, OBJECT_NAME(sm.id) AS object_name, sm.text
into #Tresult
FROM syscomments AS sm
JOIN sysobjects AS so ON sm.id = so.id
JOIN #SPrepeated as spr ON so.id = spr.id
WHERE (so.status >= 0) AND (so.xtype = 'P')
select * from #Tresult
drop table #Tresult
drop table #SPrepeated
在 #TResult 中,我拥有所有在表 syscomments
中有多条记录的存储过程。如何将它们分组并连接成每个存储过程的单个记录,考虑到结果可能超过8000个字符?