[MSSQL]批量修改存储过程视图

存储过程与视图适用

DECLARE @DBName VARCHAR(200);
DECLARE @ProcName VARCHAR(200)='w_sp_Sms_ExpeOrKeepEmpl';
DECLARE C_TABLES CURSOR FAST_FORWARD FOR
  -- 获取全部数据库
  SELECT NAME
    FROM MASTER..SYSDATABASES
    ORDER BY NAME;

OPEN C_TABLES;
  FETCH NEXT FROM C_TABLES INTO @DBName;
  WHILE @@FETCH_STATUS=0
  BEGIN
  
    -- 不能使用OBJECTPROPERTY方法和sysobjects表判断存储过程,必须先USE数据库后才能查到
    IF OBJECT_ID('[' + @DBName + '].[dbo].[' + @ProcName + ']') IS NOT NULL
    BEGIN
      PRINT @DBName;  -- 打印成功操作数据库,错误可在信息查看(普通错误直接提示,致命错误直接终止)
      EXEC('
      USE [' + @DBName + '];
      EXEC(''
      -- 单引号1个换4个


-- 可替换成视图
ALTER PROC [dbo].[' + @ProcName + ']
    @BillGuid char(36)
AS
SELECT * FROM Bill WHERE BillGuid=@BillGuid;



      '')
      ');
    END;
    FETCH NEXT FROM C_TABLES INTO @DBName;
  END
CLOSE C_TABLES;
DEALLOCATE C_TABLES;

注:使用SP_MSFOREACHDB受2000个字符限制,不得不改用游标

posted @ 2019-04-29 10:36  炎峰森林影  阅读(292)  评论(1编辑  收藏  举报