错误提示如下:
MySql.Data.MySqlClient.MySqlException: Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique sub keys

解决方案 »

  1.   

    你的SQL语句是什么?贴出来看一下。或者你可以直接到mysql中执行一下你的这个SQL语句,看一下出错的提示。
      

  2.   

    看错误大概是楼主设置主外建关系时出的错,应该是设置的列不是int的吧,mysql好像不支持非int类型的主外建关系,比如说string就不行。
      

  3.   

    baihualin1983:
    好像是支持非int类型的主外建关系的。我的问题很是怪异,调用存储过程时出的错,怪异的是第一次,第二次,第三次没问题,第四次执行就包上述错误。DELIMITER $$DROP PROCEDURE IF EXISTS `sp_SelectMessagesToSend` $$
    CREATE DEFINER=`root`@`%` PROCEDURE `sp_SelectMessagesToSend`()
    BEGIN
      SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
      -- START TRANSACTION;
      DROP TEMPORARY TABLE IF EXISTS ttAnswers;
      CREATE TEMPORARY TABLE ttAnswers (
        Question            VARCHAR(500)  NOT NULL,
        Answer              VARCHAR(1600) NOT NULL,
        SenderContactMeans  VARCHAR(5)    NOT NULL,
        SenderContactCode   VARCHAR(700)  NOT NULL,
        QueueNumber         INT,
        
        UNIQUE KEY (Question(20), SenderContactCode(30))
      ) ENGINE=MEMORY;
      
      INSERT IGNORE INTO ttAnswers(Question, Answer, SenderContactMeans, SenderContactCode, QueueNumber)
    SELECT qm.Question, qm.Answer, q.SenderContactMeans, q.SenderContactCode, q.QueueNumber
    FROM tSendQueue q
    INNER JOIN tQuestionMemory qm
    ON qm.QuestionMemoryID = q.QuestionMemoryID
    WHERE q.Sent IS NULL AND qm.Answer <> ''
    ORDER BY QueueNumber; UPDATE ttAnswers
    SET Answer = CONCAT(Answer,' \r\n',uf_SelectAd(QueueNumber));

      INSERT IGNORE INTO ttAnswers(Question, Answer, SenderContactMeans, SenderContactCode, QueueNumber)
    SELECT qm.Question, uf_GetMessage(qm.LanguageCode, 'VBUSY') Answer, q.SenderContactMeans, q.SenderContactCode, q.QueueNumber
    FROM tSendQueue q
    INNER JOIN tQuestionMemory qm
    ON qm.QuestionMemoryID = q.QuestionMemoryID
    WHERE q.Sent IS NULL AND qm.FirstLocked IS NULL AND qm.FirstUnlocked IS NOT NULL
    ORDER BY QueueNumber; SELECT SQL_BUFFER_RESULT Question, Answer, SenderContactMeans, SenderContactCode, QueueNumber
    FROM ttAnswers;  -- COMMIT;
    END $$DELIMITER ;