2011-07-07 77 views

回答

3

我不相信這是可能的。如果沒有更好的解釋你想要做什麼,我可以提供的一個建議是在插入之前將XML分開(可能使用而不是觸發器,或者在應用程序層進行粉碎)並將部分希望用於單獨的非XML列中的索引視圖。

+0

查看我的答案 - 使用存儲函數和持久計算列,它可以完成 - 有點笨重和大量的打字/編碼,但它應該工作得很好... –

+0

+1我打算建議持續計算列事實上,我重新提出了我的答案,因爲我沒有嘗試過,也沒有精力這樣做。 –

+0

(呵呵)我確實很快用測試表進行了驗證 - 它確實按我的預期工作。 –

5

根據您的需求,您可以做的是這樣的:

  • 創建一組從XML中提取關鍵信息的某些位存儲功能(函數接收XML作爲輸入,提取使用XPath/XQuery的信息,返回一個VARCHAR或INT什麼值)

    CREATE FUNCTION dbo.SomeFunction(@Input XML) 
    RETURNS VARCHAR(20) 
    WITH SCHEMABINDING 
    AS BEGIN 
        ...... 
    END 
    
  • 這些鍵位添加到您的基表作爲計算列引用這些功能,與PERSISTED關鍵字:

    ALTER TABLE dbo.YourTable 
        ADD ComputedColumns1 AS dbo.SomeFunction(XmlColumn) PERSISTED 
    
  • 創建你在桌子上,這些計算列視圖,SCHEMABINDING:

    CREATE VIEW vYourView 
    WITH SCHEMABINDING 
    AS 
         SELECT (list of columns) 
         FROM dbo.YourTable 
    
  • 上創建視圖的唯一,聚集索引 - 除非你已經違反任何索引視圖的要求,這應該只是罰款:

    CREATE UNIQUE CLUSTERED INDEX CIX_YourView ON dbo.vYourView(.....) 
    

如果您需要從XML列中提取少量信息的關鍵位,這很好,但絕對不推薦使用大量的XML元素/值。

相關問題