如何在.NET中以编程方式获取SQL Server中VIEW的sql代码

Fam*_* th 0 .net c# sql vb.net sql-server

首先,我可以使用这些简单的方法获取View的基表和列.

Private Function GetBasetableFromSql(ByVal viewTable As String) As Integer
    Dim dt As New DataTable
    Try
        Dim sqlConn As SqlConnection
        sqlConn = New SqlConnection("Data Source=xxx;Initial Catalog=xxx_MMS;User ID=xxx;Password=xxxx")
        sqlConn.Open()
        Dim ta As SqlDataAdapter
        Dim strSql As String 
         strSql = "SELECT DISTINCT VIEW_NAME,c.TABLE_NAME " + _ 
                   FROM    INFORMATION_SCHEMA.VIEW_COLUMN_USAGE AS cu JOIN    
                   INFORMATION_SCHEMA.COLUMNS AS c ON  c.TABLE_SCHEMA  = 
                   cu.TABLE_SCHEMA AND  c.TABLE_CATALOG = cu.TABLE_CATALOG AND     
                   c.TABLE_NAME    = cu.TABLE_NAME AND     c.COLUMN_NAME   = cu.COLUMN_NAME" & _
            " WHERE VIEW_NAME = '" & ViewTableName & "'"
        ta = New SqlDataAdapter(strSql, sqlConn)

        ta.Fill(dt)

        For Each dr As DataRow In dt.Rows
            dgvRootTable.Rows.Add(dr(0), dr(1))
        Next
        sqlConn.Close()

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    Return dt.Rows.Count
End Function
Run Code Online (Sandbox Code Playgroud)

但是一些View是由复杂的查询创建的.所以我需要从之前的视图中获取sql代码并使用正则表达式的方式(如果有另一种方法.请告诉我.)从sql代码字符串中获取表和列.但我不知道如何通过编程方式获取sql代码?

Sameple View是由sql代码创建的 在此输入图像描述

如果我能得到基本表和列.我将在这样的文档中创建结果

**View Table :** V_PO_SCRAP_NG_DTLS
[SCRAP_NG_DTLS].[TRAN_ID]
[SCRAP_NG_DTLS].[SEQ_NO]
[SCRAP_NG_DTLS].[CAUSE-OF-NG-JD]
[SCRAP_NG_DTLS].[CAUSE_OF_NG_DESCR]
[SCRAP_NG_DTLS].[NG_QTY]
Run Code Online (Sandbox Code Playgroud)

Bal*_*och 5

如果要查看sql脚本视图,可以使用以下命令.您可以使用相同的命令来获取存储过程的sql脚本,然后按Ctrl + T以文本格式查看结果.

sp_helptext 'yourViewName or ProcedureName'
Run Code Online (Sandbox Code Playgroud)