2015-12-11 37 views
1

背景: 首先,我想指出,這是一個發展的計算機上運行的SQL Express服務器是很重要的。服務器僅用作各種Excel報告的提要。HTTP請求 - HTML表導入/選擇到SQL Server表CLR或TSQL

由於運營孤島,我沒有直接訪問所有存儲我需要的數據的數據庫。我目前所做的是使用Excel VBA查詢表下載SSRS表,導入以訪問,然後使用鏈接服務器獲取訪問表。

問:

我修改這個CLR代碼稍微打發SSRS授權。我只是不確定如何/如果我能夠以一種讓我導入到SQL服務器上的表格的方式返回http請求。

然後我會設置一個Windows任務來自動運行sql /每天抓取數據,從進程中刪除vba/access數據庫。

如果您對替代方法有任何提示或建議,我並不太在意我如何到達那裏。謝謝你的幫助!

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 

回答

1

從SSRS返回的數據的格式是什麼?它是XML嗎?不知道更多有關確切格式很難給出詳細的建議,但我可以提幾件事情要考慮:

  1. 如果你想保持一個標量函數,你需要解析SSRS輸出與T-SQL。如果來自SSRS的數據是XML,那麼您可以通過.nodes()函數輕鬆完成。

  2. 無論返回的數據是XML還是定界的,甚至是HTML表格,文本解析通常都會被.NET更高效地處理。因此,在返回responseFromServer之後,在request = Nothing行之後,將輸出解析爲行並將函數更改爲Table-Valued函數(TVF),以便可以傳回表格。然後,你可以使用很容易填充在SQL Server表:

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

srutzky,感謝您的答覆。我發現我可以使用SSRS參數「&rs:command = render&rs:format = csv」,這使得整個過程變得更加簡單。我走了一條不同的路線,最終編寫了一個可以運行在Windows服務上的vb控制檯應用程序。我已經標記你爲答案,因爲我認爲這樣做也可以。 – yeahthisisrob