1
17
|
2
4
一个比计算字符稍微好一点的方法是使用informationschema.routines。您可以将每个例程定义的长度相加为(注意,每个例程定义的最大长度为4000个字符,请参阅下面没有此限制的方法): select Sum(Len(Routine_Definition)) from information_schema.routines where routine_type = 'PROCEDURE'
select Len(Routine_Definition), * from information_schema.routines where routine_type = 'PROCEDURE' 存储过程的长度不太可能是问题所在。数据库空间不足通常是由于不备份日志文件(然后使用dbcc shrinkfile或dbcc shrinkdatabase收缩日志文件)等原因造成的。 在Sql 2000中,下面是一个例程,它提供的长度不超过4000个字符的限制: DECLARE @Name VarChar(250) DECLARE RoutineCursor CURSOR FOR select Routine_Name from information_schema.routines where routine_type = 'PROCEDURE' DECLARE @Results TABLE ( SpName VarChar(250), SpLength Int ) CREATE TABLE ##SpText ( SpText VarChar(8000) ) OPEN RoutineCursor FETCH NEXT FROM RoutineCursor INTO @Name WHILE @@FETCH_STATUS = 0 BEGIN INSERT INTO ##SpText (SpText) EXEC sp_helptext @Name INSERT INTO @Results (SpName, SpLength) (SELECT @Name, Sum(Len(SpText)) FROM ##SpText) TRUNCATE TABLE ##SpText FETCH NEXT FROM RoutineCursor INTO @Name END CLOSE RoutineCursor DEALLOCATE RoutineCursor DROP TABLE ##SpText SELECT SpName, SpLength FROM @Results ORDER BY SpLength DESC SELECT Sum(SpLength) FROM @Results |
3
2
Dave_H的解决方案在information_schema.routines表中达到了4000个字符的限制 尝试这样做,首先生成一个包含存储过程全文的表,然后对字符长度求和。
|
4
2
需要使用DATALENGTH而不是LEN来获取字节数而不是字符数,因为sys.sql_modules目录视图的definition列是NVARCHAR(MAX),即Unicode
|
5
2
|
sqlrobert · SQL-如何查找不包含特定字段值的一组记录 1 年前 |
Nick Fleetwood · 调度语法的LINQ查询 2 年前 |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
Java · 使用交叉应用同时显示两列 2 年前 |