2010-02-01 119 views
5

我想在多个数据库中存储proc中的执行权限。问题是这个存储过程可能不在某些数据库中。那么我该如何编写一个脚本来检查存储过程是否存在于数据库中,并且如果确实为用户提供了执行权限?检查存储过程是否存在于数据库中?

回答

4

试试这个:

IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[your_procedure_name]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) 
BEGIN 
    -- Set privileges here 
END 
5

很多方法可以做到这一点:

1)

IF EXISTS (SELECT name 
     FROM sysobjects 
     WHERE name = N'proc1' 
     AND type = 'P') 

2)

IF EXISTS (SELECT * 
      FROM information_schema.routines 
      WHERE routine_name = 'Proc1') 
0

试试这个:

if exists (select 1 
     from sysobjects 
     where id = object_id('YourProc') 
     and type = 'P') 
0

检查是否存在存储过程

IF EXISTS (SELECT * FROM sys.objects 
      WHERE object_id = OBJECT_ID 
       (N'[Schema].[Procedure_Name]') AND type IN (N'P', N'PC')) 
    BEGIN 
      DROP PROCEDURE [Schema].[Procedure_Name] 
      Print('Proceudre dropped => [Schema].[Procedure_Name]') 
    END 

检查是否存在触发,功能还可以点击下面的链接 http://www.gurujipoint.com/2017/05/check-if-exist-for-trigger-function-and.html

相关问题