【问题标题】:Add some logic while using CLR stored procedure在使用 CLR 存储过程时添加一些逻辑
【发布时间】:2019-12-23 10:59:08
【问题描述】:

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

【问题讨论】:

  • 在CLR函数中处理错误并将其传回RDBMS不是更有意义吗?

标签: sql-server tsql sql-server-2016


【解决方案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,则表明当它接收的任何参数为 NULL 时,SQL Server 可以返回 NULL,而无需实际调用函数体。如果在中指定的 CLR 函数的方法已经有一个自定义属性指示 RETURNS NULL ON NULL INPUT,但 CREATE FUNCTION 语句指示 CALLED ON NULL INPUT,则 CREATE FUNCTION 语句优先。不能为 CLR 表值函数指定 OnNULLCall 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 2021-08-24
    • 2011-11-04
    • 1970-01-01
    • 2017-08-22
    • 2011-05-28
    相关资源
    最近更新 更多