使用CLR存储过程时添加一些逻辑

问题描述 投票:0回答:1

我正在尝试在存储过程中编写验证。此存储过程使用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存储过程时添加一些逻辑?

sql-server tsql sql-server-2016
1个回答
1
投票

您可以包装它:

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是解决方法。

CREATE FUNCTION

如果在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属性。

© www.soinside.com 2019 - 2024. All rights reserved.