【发布时间】:2016-10-18 05:40:01
【问题描述】:
我尝试通过我的应用程序(C# winapp)执行此命令,但它显示错误,如必须定义参数'@sqlstmt',但我通过 navicat 尝试此命令它运行良好,请帮助我
"DELIMITER $$" +
" DROP PROCEDURE IF EXISTS " + txtDB.Text + ".`index_startTime` $$" +
" CREATE PROCEDURE " + txtDB.Text + ".`index_startTime`" +
" (" +
" given_database VARCHAR(64)," +
" given_table VARCHAR(64)," +
" given_index VARCHAR(64)," +
" given_columns VARCHAR(64)" +
" )" +
" BEGIN" +
" DECLARE IndexIsThere INTEGER;" +
" SELECT COUNT(1) INTO IndexIsThere" +
" FROM INFORMATION_SCHEMA.STATISTICS" +
" WHERE table_schema = given_database" +
" AND table_name = given_table" +
" AND index_name = given_index;" +
" IF IndexIsThere = 0 THEN" +
" SET @sqlstmt = CONCAT('CREATE INDEX ',given_index,' ON '," +
" given_database,'.',given_table,' (',given_columns,')');" +
" PREPARE st FROM @sqlstmt;" +
" EXECUTE st;" +
" DEALLOCATE PREPARE st;"+
" ELSE" +
" SELECT CONCAT('Index ',given_index,' already exists on Table ',"+
" given_database,'.',given_table) CreateindexErrorMessage; "+
" END IF;"+
" END $$" +
" DELIMITER ;";
【问题讨论】:
-
整个事情应该是一个逐字字符串文字(
@),这样你就不必那样编程了。变量替换可能会发生 concat 或其他创造性。 -
也许它不需要分隔符包装器。我可以测试一下