Sql server 2005 在SQL 2005的存储过程中创建用户定义的函数

Sql server 2005 在SQL 2005的存储过程中创建用户定义的函数,sql-server-2005,stored-procedures,user-defined-functions,Sql Server 2005,Stored Procedures,User Defined Functions,我有一个存储过程,我想在其中创建一个用户定义的函数-Split(拆分用分隔符分隔的字符串并返回表中的字符串),使用该函数并最终删除该函数 我的问题是,我是否可以在存储过程中创建一个用户定义的函数,并最终删除它 多谢各位 问候 NLV技术上……是的,你可以,但这并不意味着你应该。您必须小心避免使用GO语句(只需对每个批使用Exec),但您可以执行以下操作: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE dbo.Te

我有一个存储过程,我想在其中创建一个用户定义的函数-Split(拆分用分隔符分隔的字符串并返回表中的字符串),使用该函数并最终删除该函数

我的问题是,我是否可以在存储过程中创建一个用户定义的函数,并最终删除它

多谢各位

问候
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并使用它,直到您可以再次使用它

CTEs在这里也会很好,这取决于你的UDF试图做什么。

Okie!我的想法和临时桌子一样。如果我们在USP中创建一个临时表,我们最终会在退出之前删除它,对吗?假设我们也需要删除UDF:)您不能在SQL Server中创建临时UDF(尽管您可以创建临时过程)。对于一个进行拆分的UDF,我建议将其永久化,因为您可能会再次使用它。