有没有办法使用 TSQL 返回现有视图的 FROM 部分?
我知道我可以使用 sp_helptext 获取整个视图定义,并且可以使用 sp_help 或通过从 INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 中进行选择来获取列列表,但我正在寻找的是表和连接子句。
目前,我正在将 sp_helptext 的返回值转储到 nvarchar(max) 中,并对“from”进行 charindex 搜索。我循环检查以确保左括号的数量等于右括号的数量(以排除选择中的子查询),如果不是,我搜索'from'的下一个实例。
但我希望这个解决方案远非防弹,并且会认为有一些内置的过程或系统表可以让我得到这个。
我目前使用的代码如下...
declare @from int = 1
declare @newJoin nvarchar(max)
if OBJECT_ID('tempdb..#t') is not null
begin
drop table #t
end
create table #t(
LineId int identity(1,1),
Text nvarchar(max)
)
insert into #t (Text) exec sys.sp_helptext <view_name>
set @newJoin = ''
select @newJoin = @newJoin + Text
from #t
where LEFT(LTRIM(replace(Text,char(9),' ')),2)<>'--'
order by LineId
while @from > 0
begin
SET @from = CHARINDEX('from ', @newJoin, @from + 5)
IF LEN(REPLACE(LEFT(@newJoin,@from),'(','')) = LEN(REPLACE(LEFT(@newJoin,@from),')','')) BREAK
end
set @newJoin = substring(@newJoin, @from + 5, len(@newJoin))