sql中自己创建了一个函数,如何判断该函数已经存在,如果存在删除,类似于如下语句
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[name]') AND type in (N'P', N'PC'))
DROP PROCEDURE [name]

解决方案 »

  1.   

    类似就可以了,不过不是 P
    type
    char(2)
    对象类型:
    AF = 聚合函数 (CLR)
    C = CHECK 约束
    D = DEFAULT(约束或独立)
    F = FOREIGN KEY 约束
    FN = SQL 标量函数
    FS = 程序集 (CLR) 标量函数
    FT = 程序集 (CLR) 表值函数
    IF = SQL 内联表值函数
    IT = 内部表
    P = SQL 存储过程
    PC = 程序集 (CLR) 存储过程
    PG = 计划指南
    PK = PRIMARY KEY 约束
    R = 规则(旧式,独立)
    RF = 复制筛选过程
    S = 系统基表
    SN = 同义词
    SQ = 服务队列
    TA = 程序集 (CLR) DML 触发器
    TF = SQL 表值函数
    TR = SQL DML 触发器
    TT = 表类型
    U = 表(用户定义类型)
    UQ = UNIQUE 约束
    V = 视图
    X = 扩展存储过程
      

  2.   

    A. 返回在最近 N 天内修改过的所有对象运行以下查询之前,请使用有效值替换 <database_name> 和 <n_days>。Transact-SQL
    USE <database_name>;
    GO
    SELECT name AS object_name 
      ,SCHEMA_NAME(schema_id) AS schema_name
      ,type_desc
      ,create_date
      ,modify_date
    FROM sys.objects
    WHERE modify_date > GETDATE() - <n_days>
    ORDER BY modify_date;
    GO
    B. 返回指定存储过程或函数的参数运行以下查询之前,请使用有效名称替换 <database_name> 和 <schema_name.object_name>。Transact-SQL
    USE <database_name>;
    GO
    SELECT SCHEMA_NAME(schema_id) AS schema_name
        ,o.name AS object_name
        ,o.type_desc
        ,p.parameter_id
        ,p.name AS parameter_name
        ,TYPE_NAME(p.user_type_id) AS parameter_type
        ,p.max_length
        ,p.precision
        ,p.scale
        ,p.is_output
    FROM sys.objects AS o
    INNER JOIN sys.parameters AS p ON o.object_id = p.object_id
    WHERE o.object_id = OBJECT_ID('<schema_name.object_name>')
    ORDER BY schema_name, object_name, p.parameter_id;
    GO
    C. 返回数据库中的所有用户定义函数运行以下查询之前,请使用有效数据库名称替换 <database_name>。Transact-SQL
    USE <database_name>;
    GO
    SELECT name AS function_name 
      ,SCHEMA_NAME(schema_id) AS schema_name
      ,type_desc
      ,create_date
      ,modify_date
    FROM sys.objects
    WHERE type_desc LIKE '%FUNCTION%';
    GO
    D. 返回架构中每个对象的所有者。运行以下查询之前,请使用有效名称替换所有的 <database_name> 和 <schema_name>。Transact-SQL
    USE <database_name>;
    GO
    SELECT 'OBJECT' AS entity_type
        ,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name
        ,name 
    FROM sys.objects WHERE SCHEMA_NAME(schema_id) = '<schema_name>'
    UNION 
    SELECT 'TYPE' AS entity_type
        ,USER_NAME(TYPEPROPERTY(SCHEMA_NAME(schema_id) + '.' + name, 'OwnerId')) AS owner_name
        ,name 
    FROM sys.types WHERE SCHEMA_NAME(schema_id) = '<schema_name>' 
    UNION
    SELECT 'XML SCHEMA COLLECTION' AS entity_type 
        ,COALESCE(USER_NAME(xsc.principal_id),USER_NAME(s.principal_id)) AS owner_name
        ,xsc.name 
    FROM sys.xml_schema_collections AS xsc JOIN sys.schemas AS s
        ON s.schema_id = xsc.schema_id
    WHERE s.name = '<schema_name>';
    GO
      

  3.   

    if exists (select * from sys.objects where name='Split')