zoukankan      html  css  js  c++  java
  • 刷新SQL Server所有视图、函数、存储过程

    刷新SQL Server所有视图、函数、存储过程 

    更多
     
     

    此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。

    [SQL]代码

    --视图、存储过程、函数名称
    DECLARE @NAME NVARCHAR(255);
    --局部游标
    DECLARE @CUR CURSOR 
    --自动修改未上状态为旷课
    SET @CUR=CURSOR SCROLL DYNAMIC FOR 
    SELECT NAME FROM DBO.SYSOBJECTS 
        WHERE NAME NOT IN ('SYSCONSTRAINTS','SYSSEGMENTS')
            AND
            (
                OBJECTPROPERTY(ID, N'IsView') = 1               --视图
                OR OBJECTPROPERTY(ID,N'IsProcedure') = 1        --存储过程
                OR OBJECTPROPERTY(ID,N'IsScalarFunction') = 1   --标量函数
                OR OBJECTPROPERTY(ID,N'IsTableFunction') = 1    --标题函数
                OR OBJECTPROPERTY(ID,N'IsInlineFunction') = 1   --内联函数
            );
    
    OPEN @CUR;
    FETCH NEXT FROM @CUR INTO @NAME
    
    WHILE (@@FETCH_STATUS=0)
    BEGIN
    
        DECLARE @OldText NVARCHAR(MAX);
        DECLARE @NewText NVARCHAR(MAX);
    
        --读取创建脚本,当脚本超长时分成多条记录时合并
        SELECT @OldText=@OldText + CHAR(10) + CHAR(13) + RTRIM(TEXT) FROM SYSCOMMENTS WHERE ID = OBJECT_ID(@NAME);
    
        --将创建脚本替换为更新脚本
        SET @NewText=REPLACE(@OldText,N'CREATE VIEW',N'ALTER VIEW');
        SET @NewText=REPLACE(@NewText,N'CREATE PROCEDURE',N'ALTER PROCEDURE');
        SET @NewText=REPLACE(@NewText,N'CREATE FUNCTION',N'ALTER FUNCTION');
    
        BEGIN TRY
            EXEC(@NewText);
        END TRY
        BEGIN CATCH
            PRINT N'---------------------------------------------------------------------------';
            PRINT @NAME + N' : ' + ERROR_MESSAGE();
            --PRINT @OldText;
            PRINT N'---------------------------------------------------------------------------';
        END CATCH
    
        FETCH NEXT FROM @CUR INTO @NAME
    
    END
    
    CLOSE @CUR;
    DEALLOCATE @CUR;
    

    SQL Server修改表结构后批量更新所有视图

    CREATE PROCEDURE RefreshAllView AS
    DECLARE MyCursor CURSOR
    FOR select Name from dbo.sysobjects where OBJECTPROPERTY(id, N'IsView') = 1 and (not name in ('sysconstraints','syssegments'))
    
    DECLARE @name varchar(40)
    OPEN MyCursor
    
    FETCH NEXT FROM MyCursor INTO @name
    WHILE (@@fetch_status <> -1)
    BEGIN
     IF (@@fetch_status <> -2)
     begin
     exec sp_refreshview @name
     end
     FETCH NEXT FROM MyCursor INTO @name
    END
    
    CLOSE MyCursor
    DEALLOCATE MyCursor
    

    SQL SERVER得到表、视图、存储过程、触发器、字段的信息

    select name from sysobjects where xtype='TR' --所有触发器
    select name from sysobjects where xtype='P' --所有存储过程
    select name from sysobjects where xtype='V' --所有视图
    select name from sysobjects where xtype='U' --所有表
    

    SQL SERVER得到某个数据库下面所有表字段的相信信息或者某个表的相信信息

    SELECT
    表名=case when a.colorder=1 then d.name else '' end,
    表说明=case when a.colorder=1 then isnull(f.value,'') else '' end,
    字段序号=a.colorder,
    字段名=a.name,
    标识=case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end,
    主键=case when exists(SELECT 1 FROM sysobjects where xtype='PK' and name in (
    SELECT name FROM sysindexes WHERE indid in(
    SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid
    ))) then '√' else '' end,
    类型=b.name,
    占用字节数=a.length,
    长度=COLUMNPROPERTY(a.id,a.name,'PRECISION'),
    小数位数=isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),
    允许空=case when a.isnullable=1 then '√'else '' end,
    默认值=isnull(e.text,''),
    字段说明=isnull(g.[value],'')
    FROM syscolumns a
    left join systypes b on a.xusertype=b.xusertype
    inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties'
    left join syscomments e on a.cdefault=e.id
    left join sys.extended_properties g on a.id=g.major_id and a.colid=g.minor_id
    left join sys.extended_properties f on d.id=f.major_id and f.minor_id=0
    --where d.name='course' --如果只查询指定表,加上此条件
    order by a.id,a.colorder
    

    获取指定SQLServer数据库所有表及视图的字段列表及类型、长度

    Select o.Name As ObjectsName , c.name As ColumnsName , t.name As ColumnsType , c.length As ColumnsLength
    From SysObjects As o , SysColumns As c , SysTypes As t
    Where o.type in ('u','v') And o.id = c.id And c.xtype = t.xtype
    Order By o.name , c.name , t.name , c.Length
  • 相关阅读:
    2020.10.23 19级training 补题报告
    2020.10.17 天梯赛练习 补题报告
    2020.10.16 19级training 补题报告
    2020.10.9 19级training 补题报告
    2020.10.10 天梯赛练习 补题报告
    2020.10.3 天梯赛练习 补题报告
    2020.10.2 19级training 补题报告
    第十届山东省ACM省赛复现补题报告
    VVDI Key Tool Plus Adds VW Passat 2015 Key via OBD
    Xhorse VVDI Prog Software V5.0.3 Adds Many MCUs
  • 原文地址:https://www.cnblogs.com/liangqihui/p/6583075.html
Copyright © 2011-2022 走看看