舉例來說,這不起作用:在MySQL中:如何將表名稱作爲存儲過程和/或函數參數傳遞?
DELIMITER //
CREATE PROCEDURE countRows(tbl_name VARCHAR(40))
BEGIN
SELECT COUNT(*) as ct FROM tbl_name;
END //
DELIMITER ;
CALL countRows('my_table_name');
產地:
ERROR 1146 (42S02): Table 'test.tbl_name' doesn't exist
然而,這種按預期工作:
SELECT COUNT(*) as ct FROM my_table_name;
什麼語法要求使用的參數作爲選擇語句中的表名?這甚至有可能嗎?
即使這是可能的,這不是一個你應該下去的路徑。或者用你真正想要的sql來構建s'procs,或者直接在你的代碼中嵌入ad hoc sql。 – NotMe 2010-06-04 20:00:18
@Chris你可以在這裏看到意圖和力量,對吧?將一個表名稱傳遞給一個通用函數。我認爲它是完全合法和需要的。幫助我理解爲什麼從sproc控制結果集不好?從你的意思,如果我有一個.NET開發人員和一個PHP開發人員,我應該讓他們寫出他們自己的代碼來獲得相同的結果集? – 2010-06-04 20:07:03
我看到了這個意圖,它有缺陷。我強烈建議你閱讀以下內容:http://www.sommarskog.se/dynamic_sql.html雖然它涵蓋了ms sql server,但課程是相同的。 – NotMe 2010-06-07 01:45:03