2010-03-24 72 views
0

我們可以在存儲過程中創建用戶定義函數,然後我們需要刪除該定製用戶定義函數的存儲過程結束。用戶在存儲過程中定義函數

+0

這看起來像以下副本:[在SQL 2005中的存儲過程中創建用戶定義函數](http://stackoverflow.com/questions/2505408/creating-a-user-defined-function-in-stored-在sql-2005/2505459#2505459) – Thomas 2010-03-24 05:08:04

回答

1

你可以但它可能會變得混亂。

sp_executesql。這將允許您運行任意SQL,包括DDL。以這種方式創建和使用UDF似乎有點危險 - 您需要確保與競爭線程沒有任何名稱衝突,並且無法獲得任何類型的查詢優化。

我會仔細檢查你的設計,以確保沒有其他解決方案!

0

動態SQL是唯一的方法。

ALTER PROC ... 
AS 
... 
EXEC ('CREATE FUNCTION tempFunc...') 
... 
EXEC ('DROP FUNCTION tempFunc') 
... 
GO 

但是:

  • ,如果你有2個併發執行,因爲tempFunc已經存在
  • 如果每個UDF的定義不同,它會失敗,那麼你就需要隨機的名字
  • ,如果你隨機化名稱,其餘的代碼將必須是動態SQL太
  • 一個存儲過程意味着重用,所以只是堅持它
  • 您的代碼將需要ddl_admin或db_owner權限創建UDF
  • ...

所以...你想這樣做,爲什麼呢?

+0

我想創建自定義過程就像分割詞爲給參數輸入存儲過程級別我只使用此自定義函數此過程後,我不想在sql server級別出現這個函數。 我們來考慮一下,如果用戶想創建自定義進程,他/她創建了自定義函數。完成這個過程後,他需要刪除它。類似地,如果不創建自定義函數,如果他們不刪除該函數,我們需要更多的空間來存儲數據庫級別。 – Rajagopalk 2010-03-25 06:00:11

相關問題