2011-08-11 51 views
0

這是很奇怪的問題,所以首先我將發佈的程序:MySQL存儲過程,一個INSERT不能以不同的字段名稱運行?

DELIMITER $$ 

USE `blahblahblah`$$ 

DROP PROCEDURE IF EXISTS `duplicateTradeIn`$$ 

CREATE DEFINER=`blahblahblah` PROCEDURE `duplicateTradeIn`(duplicate_claim INT(12)) 
BEGIN 

DECLARE valuation INT(12) DEFAULT 0; 
DECLARE claim INT(12) DEFAULT 0; 
DECLARE serialNumber VARCHAR(255); 
DECLARE duplicates INT(12); 
DECLARE i INT(12) DEFAULT 1; 
DECLARE claimID INT(12); 

SET @claimID = duplicate_claim; 
SET @duplicates = (SELECT COUNT(*) FROM `duplicates`); 
SET @i = 1; 

WHILE @i <= @duplicates DO 

    SET @serialNumber = (SELECT `serial` FROM `duplicates` WHERE id = @i); 

    INSERT INTO valuations (`pID`,`boughtproduct`,`valuationType`,`valuationAmount`,`working`,`accessories`,`age`,`brand`,`qty`,`created`,`valuationStatus`) 
    SELECT `pID`,`boughtproduct`,`valuationType`,`valuationAmount`,`working`,`accessories`,`age`,`brand`,`qty`,`created`,`valuationStatus` 
    FROM valuations WHERE vID = (SELECT vID FROM claims WHERE cID = @claimID); 

    SET @valuation = (SELECT LAST_INSERT_ID()); 

    INSERT INTO claims (`vID`, `pID`, `email`, `title`, `firstname`, `lastname`, `customerType`, `company`, `position`, `address1`,`address2`,`town`,`county`,`postCode`,`telephone`,`mobile`,`emailBusiness`,`emailConsumer`,`contactPost`,`contactTelephone`,`contactMobile`,`contactEmail`,`invoiceNum`,`invoiceDate`,`invoiceInc`,`reseller`,`dateOfOrder`,`heardAbout`,`salesPerson`,`method`,`cleanseCert`,`blanccoCert`,`created`,`modified`,`noInvEmailDated`,`lateRejEmailSent`,`invAddressEmailSent`,`revalueEmailSent`,`signed`,`dated`,`sessionID`,`received`,`receiptSent`,`processedDate`,`validatedDate`,`rejectedDate`,`rejectReason`,`notes`,`claimStatus`,`origin`,`invoiceexported`) 
    SELECT @valuation, `pID`, `email`, `title`, `firstname`, `lastname`, `customerType`, `company`, `position`, `address1`,`address2`,`town`,`county`,`postCode`,`telephone`,`mobile`,`emailBusiness`,`emailConsumer`,`contactPost`,`contactTelephone`,`contactMobile`,`contactEmail`,`invoiceNum`,`invoiceDate`,`invoiceInc`,`reseller`,`dateOfOrder`,`heardAbout`,`salesPerson`,`method`,`cleanseCert`,`blanccoCert`,`created`,`modified`,`noInvEmailDated`,`lateRejEmailSent`,`invAddressEmailSent`,`revalueEmailSent`,`signed`,`dated`,`sessionID`,`received`,`receiptSent`,`processedDate`,`validatedDate`,`rejectedDate`,`rejectReason`,`notes`,`claimStatus`,`origin`,`invoiceexported` 
    FROM claims WHERE cID = @claimID; 

    SET @claim = (SELECT LAST_INSERT_ID()); 

    INSERT INTO documents (`claimid`,`serial`,`filename`,`filenameOrig`,`filenameTemp`,`filetype`,`filesize`) 
    SELECT @claim,`serial`,`filename`,`filenameOrig`,`filenameTemp`,`filetype`,`filesize` 
    FROM documents WHERE claimid = @claimID; 

    INSERT INTO redemptions (`cID`,`pID`,`prID`,`bundleNo`,`serialNum`,`price`,`cashback`,`created`,`modified`,`claimStatus`) 
    SELECT @claim,`pID`,`prID`,`bundleNo`,@serialNumber,`price`,`cashback`,`created`,`modified`,`claimStatus` 
    FROM redemptions WHERE cID = @claimID; 

    INSERT INTO tradeins (`vID`,`cID`,`valuationType`,`valuationAmount`,`working`,`accessories`,`age`,`created`,`brand`,`claimStatus`) 
    SELECT @valuation,@claim,`valuationType`,`valuationAmount`,`working`,`accessories`,`age`,`created`,`brand`,`claimStatus` 
    FROM tradeins WHERE cID = @claimID; 

    SET @i = (@i + 1); 

END WHILE; 
END$$ 

DELIMITER ; 

編輯:對不起!

問題是當它試圖插入文檔(所以請參閱文檔表插入)。如果我將WHERE子句中的列(claimid)和INSERT重命名爲cID(通過更改表和查詢),它會起作用,否則當它被命名爲claimid not cID時,它會拒絕插入新行。如果您對此有任何想法或見解,將非常感激。

要嘗試和澄清:

與現場和查詢文件表作爲CID不ClaimID的作品。 帶有字段和查詢作爲claimid的文檔表不會插入行。

所有其他查詢似乎工作正常,它只發生在我試圖在文檔表中的cID,因爲這是唯一的區別。

再次抱歉之前的模糊,我希望現在的問題更清楚。

謝謝!

+2

這是一個很奇怪的問題。你粘貼一大堆帶有列名的SQL,然後參考「THE」列。這是一個詭計問題,我們應該猜測你所指的是哪一列? – Eddy

回答

0

只是爲了澄清這一點。這正如我所說的,也許是一個在MySQL中的錯誤?如果有一個ID字段不同的字段的表。在這個例子的cID和claimid中,它不會識別第二個聲明字段claimid而不執行查詢。

爲了這個工作,我不得不將文檔表從claimID修改爲cID。

相關問題