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
好了,列位如果有意见,尽管留言,毕竟我也是个爱学习,爱上进的萌新。