簡體   English   中英

存儲過程輸出以查看

[英]Stored procedure output to view

我有只能從表或視圖中讀取的軟件。 我需要為該軟件提供一些來自clr方法的數據(例如,來自Web服務的數據)。 該軟件將讀取以下數據:

select * from my_view WHERE somefield = 'data_identificator'

然后clr需要獲取該字段作為參數並執行其他代碼,然后從視圖返回結果(如結果)。 有可能嗎?

如果提供了所需代碼的完整示例而不是部分示例,則此問題將更容易回答,但我想我已經足夠理解,可以朝着正確的方向發展。

是的,可以使用SQLCLR從外部資源(例如Web服務等)獲取數據。 您可以編寫專門的標量或表值函數來調用特定方法並返回已解析的輸出。 或者,您可以創建一個泛型函數,該函數返回生成的XML,然后在T-SQL中對其進行解析。

如果需要執行多個步驟,則可以從T-SQL多語句表值函數調用該SQLCLR函數。 這甚至使您能夠傳遞參數。

您的軟件“只能從表或視圖中讀取”, 應該能夠從此多SELECT表值函數(TVF)中進行SELECT ,因為它的作用類似於可以傳遞參數的視圖。 如果出於某種原因您的軟件無法從TVF中進行選擇,則可以包裝SELECT field1, field2, ... FROM dbo.MyTVF(); 在一個View

您究竟如何編寫這樣的SQLCLR函數來調用Web服務? 沒那么快。 如果您首先問這個問題,那么將這種性質的代碼復制粘貼到項目中,弊大於利。 是的,在各個站點(甚至在此處)都有幾個在SQLCLR函數或過程中調用Web服務的示例,但是其中一些(甚至大多數?)做得很差。 即使您有.NET編程經驗,也需要注意SQL Server CLR主機的許多細微差別。 因此,在沒有先了解環境的限制以及如何與SQL Server正確交互之前,您實際上不應該編寫SQLCLR代碼。 為了解決這個問題,我開始着手編寫有關SQL Server Central的系列文章: SQLCLR的階梯 (需要免費注冊)。

我還將提到,對於任何有興趣調用URI但不願意或無法編寫任何代碼來執行此操作的人, SQL# SQLCLR庫中都有一個稱為INET_GetWebPages的表值函數可以執行此操作。 完全公開:我是SQL#的作者,雖然有免費版本,但INET_GetWebPages函數僅在完整版本中可用。

因此,經過一些研究,並根據srutzky和JamesZ的最終回答發表評論。

  1. 創建CLR表值函數。
  2. 從某個幫助表創建視圖,在該表中存儲了所有可能的查詢參數值。 我不知道如何擺脫它。 (對我來說這不是問題,我有這樣的桌子)。

CREATE VIEW [dbo].[MyView] AS SELECT a.*, s.ValueFromTvf FROM HelpTable a CROSS APPLY dbo.MyClrFunction(a.PropertyA) s

如果我從該視圖中SELECT
選擇*從MyView
在哪里PropertyA ='123456'
MyClrFunction將使用參數“ 123456”執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM