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

时间:2023-12-11 10:47:08

最近在维护一个电商平台,需要对订单表增加字段,但是在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

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