我想在不准备查询的情况下在存储过程中执行以下查询,因为这会给我传递参数的问题。
DELIMITER //
CREATE PROCEDURE Test (
IN CID BIGINT(20),
IN IDs LONGTEXT
)
BEGIN
#EXECUTE UNDERNEATH QUERY
SELECT * FROM CONCAT('Part1_OfTableName', CID); #CID IS CustomerID
END //
DELIMITER ;然而,这是失败的,我不知道如何解决这个问题。
(请注意,在示例中,我的表名中没有空格,但是在我的情况下,我的表名中可能有一个空格)
发布于 2017-04-26 19:37:49
如果需要使用必须准备的sql语句返回存储过程的结果,则可以使用中间临时表。
BEGIN
CREATE TEMPORARY TABLE `myresults` blah blah....;
//construct and prepare select you would've used, but start it with an insert like so...
// INSERT INTO `myresults` SELECT ....
// Execute the prepared query
SELECT * FROM `myresults`;
DROP TEMPORARY TABLE `myresults`;
END...at --至少我很确定这种技术曾经有效;在过去的几年里,我在MSSQL中工作得更多了。
值得注意的事情:
myresults这样的通用名称是安全的,但是如果查询使用了相同的名称;在实践中/偏执中,我倾向于使用不同的guid (在使用这种技术的每个过程中)作为在其中生成的任何临时表的前缀。https://stackoverflow.com/questions/43643003
复制相似问题