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
  

 

 

好了,列位如果有意見,盡管留言,畢竟我也是個愛學習,愛上進的萌新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM