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))