2010-08-12 98 views
1

我正在寻找一个可能的MySqL查询,它将检查存储过程是否存在于数据库服务器上,如果它确实很好返回,如果它没有,那么我可以插入它使用c#。mysql存储过程,查询是否存在或不存在

任何帮助表示赞赏

瓦杰

回答

4

你可以这样做:

SELECT * FROM `information_schema`.`ROUTINES` where specific_name = 'my_procedure_name' and routine_schema = 'my_schema' 

..如果存在,应该得到结果。但是,请记住,大多数共享托管mysql服务,例程,触发器等通常不允许创建。如果它是你自己的服务器,没问题;)

+0

如果prodecure是插入的,这仍然会工作吗? (插入过程的原因是,我需要last_inserted_id()和我的c#应用程序中使用odbc驱动程序的一些不知名的原因,它不会返回last_inserted_id()的结果,所以该过程对我来说) – Vade 2010-08-12 11:27:13

+0

啊,你意味着触发器?如果在插入之后或之前调用该过程,这仍然适用,但是我没有掌握语法。无论如何,如果定义了触发器/过程,它将位于信息模式中,在几乎所有情况下(我总是能够查询它)可供用户使用。 – dmp 2010-08-12 18:48:29

2

MS SQL您可以执行以下查询:

if exists 
(
    select name from sysobjects 
    where name = 'function_name' and type = 'fn' 
) 
begin 
    drop function function_name 
end 
go