【问题标题】:get function name from itself从自身获取函数名
【发布时间】:2016-02-26 21:22:13
【问题描述】:

我有一个函数,在这个函数里面,我想得到函数的名字。我能怎么做?我试过了:

CREATE FUNCTION dbo.func_test
--....
-- get name function
IF OBJECT_NAME(@@PROCID) LIKE '%_test%'
SELECT @isTest = 1
ELSE
SELECT @isTest = 0

OBJECT_NAME(@@PROCID)似乎支持存储过程,不支持

【问题讨论】:

  • 我试过了,但不正确
  • 你试过了,然后呢?错误?结果不正确?如果是,返回什么名称?
  • 它返回 null,而不是函数名

标签: sql sql-server


【解决方案1】:

这是 SQL Server 的bug

也许我用其他方式

【讨论】:

    【解决方案2】:

    试试这个

     DECLARE @isTest INT
    
    IF EXISTS (
    SELECT 1 FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'FUNCTION' AND ROUTINE_NAME  LIKE '%_test%')
    BEGIN
    SELECT @isTest = 1
    END
    ELSE
    BEGIN
    SELECT @isTest = 0
    END
    
    SELECT @isTest 
    

    【讨论】:

    • OP 正在查找当前正在执行的函数的名称。您的脚本检查是否存在具有特定模式的函数。那不一样。
    • 只需将我的代码添加到您的 func_test 函数中(替换所有内容,只需保留签名即可编辑函数)并执行。
    • 哦,先生,这不正确。我想获取 name 函数 iteft
    • 你想要你自己执行的函数名吗?比如@TT。在上面的评论中告诉
    【解决方案3】:

    你遇到的错误是什么,它对我有用..

    alter function dbo.uspo_test ()
    returns int
    as
    begin
    declare @name varchar(20)
    set @name=object_name(@@procid)
    if (@name) like '%_test'
    return 1
    
    return 0
    end
    
    select dbo.uspo_test ()
    --output 1
    

    【讨论】:

    • OP 答案中的链接表明该错误仅适用于内联表值函数。问题中缺少此信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2013-10-30
    • 2013-04-21
    • 2010-10-25
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    相关资源
    最近更新 更多