我有一個存儲過程,我想在其中創建一個用戶定義的函數 - 拆分(拆分用分隔符分隔的字符串並返回表中的字符串),利用該功能並最終放棄該功能。在SQL 2005的存儲過程中創建用戶定義函數
我的問題是,我是否可以在存儲過程中創建用戶定義的函數並最終放棄它?
謝謝。
問候 NLV
我有一個存儲過程,我想在其中創建一個用戶定義的函數 - 拆分(拆分用分隔符分隔的字符串並返回表中的字符串),利用該功能並最終放棄該功能。在SQL 2005的存儲過程中創建用戶定義函數
我的問題是,我是否可以在存儲過程中創建用戶定義的函數並最終放棄它?
謝謝。
問候 NLV
技術上......是的,你可以,但並不意味着你應該。你必須要小心,避免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並使用它,直到你可能再次使用它。
CTE在這裏也很好,這取決於你的UDF試圖做什麼。
Okie!我認爲它和臨時桌子一樣。如果我們在USP中創建臨時表,我們最終會在退出之前將其刪除,對嗎?假設我們需要刪除UDF :) – NLV 2010-03-24 05:08:31
您不能在SQL Server中創建臨時UDF(儘管您可以創建臨時過程)。對於可以拆分的UDF,我建議將其設爲永久性的,因爲您可能會再次使用它。 – Thomas 2010-03-24 05:11:51