最近在維護一個電商平台,需要對訂單表增加字段,但是在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
好了,列位如果有意見,盡管留言,畢竟我也是個愛學習,愛上進的萌新。