我正在尝试在存储过程中编写验证。此存储过程使用CLR代码创建CLR存储过程:
CREATE OR ALTER PROCEDURE SayHelloVoice
@messageText NVARCHAR(MAX),
@procedureName NVARCHAR(MAX)
AS
EXTERNAL NAME say.[CLRProcedures.SayHi].Voice
GO
上面的代码运行完美。但是,我需要添加一些验证:
CREATE OR ALTER PROCEDURE SayHelloVoice
@messageText NVARCHAR(MAX),
@procedureName NVARCHAR(MAX)
AS
IF @messageText IS NULL
RAISERROR('Custom text', 16,16)
-- some other logic here
EXTERNAL NAME say.[CLRProcedures.SayHi].Voice
GO
但是SSMS显示错误:
关键字“ EXTERNAL”附近的语法不正确。
如何在使用CLR存储过程时添加一些逻辑?
您可以包装它:
CREATE OR alter PROCEDURE SayHelloVoice_sub
@messageText NVARCHAR(MAX)
, @procedureName nvarchar(MAX)
AS
EXTERNAL NAME say.[CLRProcedures.SayHi].Voice
GO
和
CREATE OR alter PROCEDURE SayHelloVoice
@messageText NVARCHAR(MAX)
, @procedureName nvarchar(MAX)
AS
IF @messageText IS NULL
RAISERROR('Custom text', 16,16)
-- some other logic here
EXEC SayHelloVoice_sub @messageText,@procedureName;
GO
编辑:
如果只处理NULL
,那么RETURNS NULL ON NULL INPUT
是解决方法。
如果在CLR函数中指定了RETURNS NULL ON NULL INPUT,则表明SQL Server收到的任何参数为NULL时,都可以返回NULL,而无需实际调用函数的主体。如果的方法指定的CLR函数已经具有表示RETURNS NULL ON NULL INPUT的自定义属性,但是CREATE FUNCTION语句指示CALLED ON NULL INPUT,则CREATE FUNCTION语句优先。无法为CLR表值函数指定OnNULLCall属性。