首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否检查所有存储过程的语法?

是否检查所有存储过程的语法?
EN

Stack Overflow用户
提问于 2009-07-24 13:27:14
回答 9查看 26.9K关注 0票数 18

我希望确保所有存储过程在语法上仍然有效。(如果有人重命名/删除表/列,就会发生这种情况)。

现在,要检查所有存储过程的语法,我的解决方案是进入Enterprise Manager,选择列表中的第一个存储过程,然后使用过程:

  1. Enter
  2. Alt+C
  3. Escape
  4. Escape
  5. Down箭头
  6. Goto 1

它是有效的,但相当单调乏味。我想要一个名为

SyntaxCheckAllStoredProcedures

与我编写的其他存储过程一样,它对视图也做同样的事情:

RefreshAllViews

为了每个人的利益,RefreshAllViews:

RefreshAllViews.prc

代码语言:javascript
运行
复制
CREATE PROCEDURE dbo.RefreshAllViews AS

-- This sp will refresh all views in the catalog. 
--     It enumerates all views, and runs sp_refreshview for each of them

DECLARE abc CURSOR FOR
     SELECT TABLE_NAME AS ViewName
     FROM INFORMATION_SCHEMA.VIEWS
OPEN abc

DECLARE @ViewName varchar(128)

-- Build select string
DECLARE @SQLString nvarchar(2048)

FETCH NEXT FROM abc 
INTO @ViewName
WHILE @@FETCH_STATUS = 0 
BEGIN
    SET @SQLString = 'EXECUTE sp_RefreshView '+@ViewName
    PRINT @SQLString
    EXECUTE sp_ExecuteSQL @SQLString

    FETCH NEXT FROM abc
    INTO @ViewName
END
CLOSE abc
DEALLOCATE abc

为了每个人的利益,将所有存储过程标记为需要重新编译的存储过程(将存储过程标记为重新编译不会告诉您它在语法上是否有效):

RecompileAllStoredProcedures.prc

代码语言:javascript
运行
复制
CREATE PROCEDURE dbo.RecompileAllStoredProcedures AS

DECLARE abc CURSOR FOR
     SELECT ROUTINE_NAME
     FROM INFORMATION_SCHEMA.routines
    WHERE ROUTINE_TYPE = 'PROCEDURE'
OPEN abc

DECLARE @RoutineName varchar(128)

-- Build select string once 
DECLARE @SQLString nvarchar(2048)

FETCH NEXT FROM abc 
INTO @RoutineName
WHILE @@FETCH_STATUS = 0 
BEGIN
    SET @SQLString = 'EXECUTE sp_recompile '+@RoutineName
    PRINT @SQLString
    EXECUTE sp_ExecuteSQL @SQLString

    FETCH NEXT FROM abc
    INTO @RoutineName
END
CLOSE abc
DEALLOCATE abc

为了完整起见,我们使用UpdateAllStatistics过程。这将通过执行完整数据扫描来更新数据库中的所有统计信息:

RefreshAllStatistics.prc

代码语言:javascript
运行
复制
CREATE PROCEDURE dbo.RefreshAllStatistics AS

EXECUTE sp_msForEachTable 'UPDATE STATISTICS ? WITH FULLSCAN'
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1177659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档