2010-08-12 128 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