【问题标题】:HTTP Request - HTML Table Import/Select Into SQL Server Table CLR or TSQLHTTP 请求 - HTML 表导入/选择到 SQL Server 表 CLR 或 TSQL
【发布时间】:2016-03-17 23:46:55
【问题描述】:

背景: 首先,我认为重要的是要注意这是在开发机器上运行的 SQL Express Server。服务器仅用作各种 excel 报告的提要。

由于操作孤岛,我无法直接访问存储所需数据的所有数据库。我目前正在做的是使用 Excel VBA 查询表下载 SSRS 表,导入访问,然后使用链接服务器获取访问表。

问题:

我稍微修改了这个 CLR 代码以通过 SSRS 授权。我只是不确定如何/是否可以以让我导入 SQL 服务器上的表的方式返回 http 请求。

然后我会设置一个 windows 任务来每天自动运行 sql/grab 数据,从进程中删除 vba/access db。

如果您对替代方法有任何提示或建议,我不太关心我是如何到达那里的。感谢您的帮助!

Imports System.IO
Imports System.Data.SqlTypes
Imports System.Net
Public Class FavoriteCLRs
<Microsoft.SqlServer.Server.SqlFunction()>
Public Shared Function CLR_WebQuery(ByVal URL As String) As String
    Dim cookieContainer As CookieContainer = New CookieContainer()

    Dim myCredentials As New NetworkCredential("user", "password")
    ' Create a WebRequest with the specified URL. 
    Dim request As HttpWebRequest = CType(HttpWebRequest.Create(URL), HttpWebRequest)
    myCredentials.Domain = "domain"
    request.Credentials = myCredentials

    request.Timeout = 10000
    request.Method = "GET"
    request.KeepAlive = True
    request.AllowAutoRedirect = True
    request.PreAuthenticate = True
    request.CookieContainer = cookieContainer
    Using response As WebResponse = request.GetResponse()
        Using dataStream As Stream = response.GetResponseStream()
            Using reader As New StreamReader(dataStream)
                Dim responseFromServer As String = reader.ReadToEnd()
                Return responseFromServer
            End Using
        End Using
    End Using
    request = Nothing
End Function
End Class

【问题讨论】:

    标签: sql sql-server vb.net tsql sqlclr


    【解决方案1】:

    从 SSRS 返回的数据格式是什么?是 XML 吗?在不了解确切格式的情况下,很难给出详细的建议,但我可以提几点需要考虑的事项:

    1. 如果要保留标量函数,则需要使用 T-SQL 解析 SSRS 输出。如果来自 SSRS 的数据是 XML,那么您可以通过 .nodes() 函数轻松地做到这一点。

    2. 无论返回的数据是 XML 还是分隔的,甚至是 HTML 表格,文本解析通常都会由 .NET 更有效地处理。因此,不要在request = Nothing 行之后返回responseFromServer,而是将输出解析为行并将函数更改为表值函数(TVF),以便您可以传回一个表。然后,您可以使用以下方法非常轻松地在 SQL Server 中填充表:

      INSERT INTO dbo.SomeTable (Col1, Col2, ...)
        SELECT Field1, Field2,...
        FROM   dbo.CLR_WebQuery(N'http://some/URL.aspx?stuff');
      

    【讨论】:

    • srutzky,感谢您的回复。我实际上发现我可以使用 SSRS 参数“&rs:command=render&rs:format=csv”,这使整个过程变得更加容易。我走了一点不同的路线,最后编写了一个可以在 Windows 服务上运行的 vb 控制台应用程序。我已将您标记为答案,因为我认为这也可以。
    猜你喜欢
    • 1970-01-01
    • 2018-07-28
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2018-08-21
    相关资源
    最近更新 更多