我正在尝试编写一个UDF,将字符串(GUID或与该GUID关联的项目代码)翻译成GUID:
CREATE FUNCTION fn_user_GetProjectID
(
@Project nvarchar(50)
)
RETURNS uniqueidentifier
AS
BEGIN
declare @ProjectID uniqueidentifier
BEGIN TRY
set @ProjectID = cast(@Project as uniqueidentifier)
END TRY
BEGIN CATCH
set @ProjectID = null
END CATCH
if(@ProjectID is null)
BEGIN
select @ProjectID = ProjectID from Project where projectcode = @Project
END
return @ProjectID
END
如果将上述代码嵌入到我的存储过程中,这将很好地运行,但我想将其制作成一个函数,以便我遵循DRY原则。
当我尝试创建该函数时,我会收到以下错误:
Msg 443, Level 16, State 14, Procedure fn_user_GetProjectID, Line 16
Invalid use of side-effecting or time-dependent operator in 'BEGIN TRY' within a function.
有人知道我如何避免这个错误吗?
编辑:我知道在函数中不能使用Try-Catch,我想简化问题,是否有一种转换方式,如果转换失败只返回NULL而不是错误?