2

有没有办法使用 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))
4

1 回答 1

0

一些系统表可能会有所帮助:

select distinct t.name from sys.tables t
inner join sys.sysdepends d on t.object_id = d.depid
where object_id = object_id('<view_name>')
于 2012-10-01T22:20:47.163 回答