2011-11-25 59 views
0

我對存儲過程很陌生。我正在嘗試創建一個將記錄插入到兩個不同表中的存儲過程,但我遇到了問題。嘗試使用2個插入創建存儲過程

我使用C#編寫.NET連接到MySQL。

我有兩個表,prop_detailsprop_accountprop_details表具有自動增量列(id),並且prop_account表定義與prop_details.id匹配的外鍵prop_id

以下僞代碼解釋了存儲過程應該做的事:

insert form elements into table prop_details 
insert relationship of prop_details.id into table prop_account 

這裏是我試圖創建

DROP PROCEDURE IF EXISTS `InsertPropertybyClientID`; 

CREATE DEFINER = `root`@`localhost` PROCEDURE `InsertPropertybyClientID`(IN 'in_account' int(11), IN `in_title` varchar(100), IN 'in_type' int(2), IN 'in_active' tinyint(1), IN 'in_created' datetime) 
BEGIN 
INSERT INTO prop_details 
    (prop_title, prop_type, prop_active) 
VALUES 
    (in_title, in_type, in_active, in_created); 

INSERT INTO prop_account 
    (prop_id, acnt_id) 
VALUES 
    (LAST_INSERT_ID(), in_account); 
END; 

當試圖保存存儲過程的存儲過程,我我得到這個錯誤

1064 - 你的SQL語法錯誤;在'in_account'int(11),IN'in_title'varchar(100),IN'in_type'int(2),IN'in_ac'at line附近檢查正確的語法對應的MySQL服務器版本的手冊?1

我在做什麼錯

+5

嘗試一下,不要在參數名稱周圍加引號。即使用IN in_account int(11),而不是IN'in_account'int(11) – Sparky

+0

感謝Sparky,這工作.. – Rick

回答

2

其實錯誤的詳細信息表達的東西是錯誤的:

近「 'in_account' INT(11),IN 'in_title' 爲varchar(100) ,IN'in_type'int(2),IN'in_ac'at line 1

在MySQL參考文檔上identifiers,它指出:

標識符引號字符是倒引號(「`」):

如果ANSI_QUOTES SQL模式是啓用後,還可以在雙引號內引用標識符:

這意味着除非啓用ANSI_QUOTES SQL模式,否則不應使用單引號或雙引號來表示標識符。你可以使用反引號(`),或者如果你使用的單詞不是reserved word,你可以省略反引號。