2

TSQL を使用して既存のビューの FROM セクションを返す方法はありますか?

sp_helptext を使用してビュー定義全体を取得でき、sp_help または INFORMATION_SCHEMA.VIEW_COLUMN_USAGE から選択して列のリストを取得できることはわかっていますが、探しているのはテーブルと結合句です。

現在、sp_helptext からの戻り値を nvarchar(max) にダンプし、'from' の charindex 検索を行っています。左括弧の数が右括弧の数と等しいことを確認するためのチェックをループし (select 内のサブクエリを除外するため)、そうでない場合は「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 に答える