1

我有一個存儲過程,我想在其中創建一個用戶定義的函數 - 拆分(拆分用分隔符分隔的字符串並返回表中的字符串),利用該功能並最終放棄該功能。在SQL 2005的存儲過程中創建用戶定義函數

我的問題是,我是否可以在存儲過程中創建用戶定義的函數並最終放棄它?

謝謝。

問候 NLV

回答

1

技術上......是的,你可以,但並不意味着你應該。你必須要小心,避免GO語句(只使用Exec的每個批次),但你可以這樣做:

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE dbo.Test 
AS 

Declare @Sql nvarchar(max) 

Set @Sql = 'CREATE FUNCTION dbo.Foo 
( 
) 
RETURNS TABLE 
AS 
RETURN 
(
    SELECT 0 As Bar 
)' 

Exec(@Sql) 

Select * 
From dbo.Foo() 


Set @Sql = 'Drop Function dbo.Foo' 
Exec(@Sql) 

Return 
GO 
Exec dbo.Test 

這就是說,我會強烈建議對這類解決方案,尤其是在功能你想要的是像分裂函數那樣有用的東西。我會建議只創建UDF並使用它,直到你可能再次使用它。

+0

Okie!我認爲它和臨時桌子一樣。如果我們在U​​SP中創建臨時表,我們最終會在退出之前將其刪除,對嗎?假設我們需要刪除UDF :) – NLV 2010-03-24 05:08:31

+0

您不能在SQL Server中創建臨時UDF(儘管您可以創建臨時過程)。對於可以拆分的UDF,我建議將其設爲永久性的,因爲您可能會再次使用它。 – Thomas 2010-03-24 05:11:51

0

CTE在這裏也很好,這取決於你的UDF試圖做什麼。

相關問題