2011-07-29 34 views
1

SQL Server存儲過程和用戶​​定義函數之間存在若干限制。 UDF的不能動態返回用戶定義表函數中不同列的表。

  • 使用非確定性函數
  • 更改數據庫
  • 回短信給呼叫者
  • 有任何副作用的狀態

存儲過程可以返回多個記錄集並且它們不需要每次都返回相同的字段。

create proc custom.sproc_CrazyFields 
      @ThisItem int 
as 
    begin 
     if @ThisItem < 10 
     begin 
      select 'this' as ThisField, 'that' as ThatField, 'theOther' as theOtherField; 
     end 
     else 
      begin 
       Select 'theOther' as theOtherField, 'that' as thatField, 'this' as thisField; 
      end 
    end 
    go 
    exec custom.sproc_CrazyFields 4 

    exec custom.sproc_CrazyFields 40 

內聯函數只返回單個select語句。 多語句函數必須聲明返回的表。

有沒有辦法用UDF動態地返回結果與改變列或是這種差異之一?

回答

3

對不起,你不能在一個函數中使用動態SQL。也許你可以做的是編寫一個存儲過程,在動態SQL中創建一個函數,調用函數,然後刪除它。但是,爲什麼不直接在這一點上建立查詢呢?

+0

我猜測答案是否定的,但是我從來沒有在任何列表中看到過這個比較和對比特效和udf的。動態sql的好處。 – JeffO

+0

實際限制並不禁止動態SQL,本身就是你不能有副作用。這意味着您不能使用EXEC(無論您是使用EXEC()還是EXEC sp_executeSQL),都需要使用EXEC(動態SQL所需的)。 –

相關問題