我希望有人能幫助我解決這個問題。C#MySqlCommand多重丟棄外鍵問題
我有一個小應用程序來修補我們的數據庫,因爲我們需要增加功能並修復錯誤。它讀入的補丁只是包含SQL語句的文件,並執行一些內部管理,查詢數據庫並應用尚未應用的補丁。無論如何,這是我們的解決方案,無論是好的還是壞的,它的工作都很好......直到現在。
我發現有必要刪除多個表上的現有外鍵約束,並用ON DELETE CASCADE子句替換它們,而不是ON DELETE RESTRICT。這個想法是刪除其他表格中引用的PK將導致所有其他的清除。
本質上的補丁文件具有在它下面:
ALTER TABLE `mydb`.`table2` DROP FOREIGN KEY `fk_table2_id`;
ALTER TABLE `mydb`.`table3` DROP FOREIGN KEY `fk_table3_id`;
ALTER TABLE `mydb`.`table4` DROP FOREIGN KEY `fk_table4_id`;
和相關
ALTER TABLE `mydb`.`table2` ADD CONSTRAINT `fk_table2_id` FOREIGN KEY `fk_table_id` (`fk_the_id`) REFERENCES `mydb` (`id`)
ON DELETE CASCADE
ON UPDATE RESTRICT;
etc...
在C#的一面,當我通過這個字符串(在補丁文件中找到的SQL語句)如下:
MySqlCommand myCommand = new MySqlCommand(thePatch);
myCommand.Connection = connection;
myCommand.ExecuteNonQuery();
我收到以下錯誤信息:
上的重命名錯誤 '\ mydb的\表2' 。以(錯誤:152)' \ MYDB#sql2-6a8-3f。」
當我有兩個的這些,我只得到這個刪除字符串中的FOREIGN KEY行。
我已經確定DROP行上列出的鍵是鍵而不是列名,其他所有內容都出現(對我來說至少)是可以的。
我已經在單個MySqlCommand中包含多個SQL語句,並沒有問題,所以我有點沮喪。
我可以採取相同的文件,並從命令行管道它到mysql.exe,它工作正常,所以它似乎在如何處理語句的差異。
有沒有人對此有任何意見?
謝謝, 馬特