SQLServer如何查询表相关的视图以及存储过程

最近在维护一个电商平台,需要对订单表增加字段,但是在review代码的时候发现这个平台的代码写的很有提升价值,且大量的使用了视图和存储过程,所以也给刚接触这个平台的萌新,也就是俺,造成了不小的困扰,毕竟有针对性的调整表结构的时候,最好是要找到表相关的所有识图还有存储过程,以便在做调整之后,准确识别那些需要做调整,那些不需要做调整。

考虑到全部识别表所在的识图以及存储过程,瓦就想到了是否可以整个SQL,直接把查出来表对应的视图和存储过程,毕竟瓦是辣么懒,实在不想一个一个的点开视图,然后再搜索。BTW为啥不根据视图或存储过程确认,是因为明明太暧昧,我看了完全不知道这是要干嘛的。

一番云雨之后,产物:

begin
    declare @a int,@error int    
    declare @temp varchar(50)
    DECLARE @targetTable VARCHAR(100) 
    set @a=1
    set @error=0
    SET @targetTable='你想在存储过程和视图查询的表名'

    --判断临时表是否存在
    if exists (select * from tempdb..sysobjects where id=object_id('tempdb..#P_Vtable')) 
        -- 删除表 
        drop table #P_Vtable
    --临时表用于存放包含检索表的识图和存储过程
    CREATE TABLE #P_Vtable([text] VARCHAR(100))
    --申明游标为Uid
    declare order_cursor cursor 
    for (SELECT OBJECT_NAME(id) FROM syscomments WHERE id in (select id from sysobjects where type  in('V','P')))
    --打开游标--
    open order_cursor
    --开始循环游标变量--
    fetch next from order_cursor into @temp
    while @@FETCH_STATUS = 0    --返回被 FETCH语句执行的最后游标的状态--
        begin            
            CREATE TABLE #temptable([text] TEXT)

            INSERT INTO #temptable([text]) 
            EXEC sp_helptext @temp

            DECLARE @targetCount INT
            SELECT @targetCount=COUNT(1)
            FROM #temptable 
            WHERE text LIKE '%'+@targetTable+'%'

            DROP TABLE #temptable

            IF @targetCount>0
            BEGIN
                INSERT INTO #P_Vtable([text])
                VALUES (@temp)
            END 

            set @a=@a+1
            set @error= @error + @@ERROR   --记录每次运行sql后是否正确,0正确
            fetch next from order_cursor into @temp   --转到下一个游标,没有会死循环
        end    
    close order_cursor  --关闭游标
    deallocate order_cursor   --释放游标
    SELECT DISTINCT [text] FROM #P_Vtable
END
  

 

 

好了,列位如果有意见,尽管留言,毕竟我也是个爱学习,爱上进的萌新。

posted @ 2018-09-19 17:01  大山楂丸子  阅读(2211)  评论(0编辑  收藏  举报