2012-01-06 71 views
2

我有一個表值參數類型dbo.SectionIn SProc。這個參數在整個SProc中都被使用,我想從中刪除一些記錄,但是當然它是隻讀的設計。表值參數ReadOnly解決方法

The table-valued parameter "@sections" is READONLY and cannot be modified. 

我的計劃是將其內容複製到一個表變量,並用它來代替。

DECLARE @sectionDups as dbo.SectionIn 
    INSERT INTO @sectionDups 
    SELECT * 
    FROM @sections 

我的問題是這會招致查詢計劃,如果沒有任何性能損失,背後有什麼擺在首位的只讀要求的理由?

回答

0

將有性能損失,因爲複製的表,在參數表中的多個行,越會降低性能,但如果可以忽略不計,以SP

的總運行AFAIK只讀的唯一原因tvp是 - 因爲它是sql server中非常新鮮的功能,讀寫仍在構建中,所以 - 耐心等待

0

您不應該將TVP表變量複製到新的表變量中。如果要排除行然後執行下列操作之一:

  1. 使用WHERE子句來過濾掉不需要的行。

  2. 創建本地臨時表(單#)和TVP數據複製到這一點。雖然這樣做似乎需要使用WHERE子句,所以這不會有很大的價值之外:

    • 更好地統計一個臨時表,而不是表變量(但使用語句級OPTION (RECOMPILE)解決了一個)
    • 添加列已經修改值
    • 能力在TVP
能力