2017-12-04 4 views
1

ある表から別の表に列をコピーするトリガーがあります。動的変数@nametableにテーブル名を割り当てるにはどうすればよいですか? 毎日、テーブルの名前は現在の日付によって変わります。トリガー内の動的名表

USE dbo; 
DROP TRIGGER IF EXISTS `update_test`; 

GO 

DELIMITER | 

CREATE TRIGGER `update_test` AFTER INSERT ON `hello_send` 

FOR EACH ROW 

BEGIN 

DECLARE nametable VARCHAR(128); 

SET @nametable =(DATE_FORMAT(NOW(),"%d%m%Y_v")); 

    INSERT INTO `dbo`.`nametable` SET 
     `TIME_` =NEW.`recorded`, 
     `P1` = NEW.`value1` 
    ON DUPLICATE KEY UPDATE 
     `TIME_` = NEW.`recorded`, 
     `P1` = NEW.`value1`; 

END; 

はエラーERROR 1146: Table 'dbo.nametable' doesn't exist

+0

は([準備SQLステートメント構文]を見てくださいhttps://dev.mysql.com /doc/refman/5.7/en/sql-syntax-prepared-statements.html) - しかしあなたがしようとしていることは悪い考えのように見えます。 –

+1

これは本当に悪いデザインの選択肢のようです。毎日テーブルを作成し、トリガーでそれを記入しますか?それはあなたがどんなコストで避けるべきかです。 –

+1

「本当に悪いデザインの選択」を毎日のテーブルに載せていますか?そのレコードの自分の列の日付を持つテーブルはどうですか?あなたはこのデザインで非常に苦しい道を歩いて行きました。 – JNevill

答えて

0

は、私は一時的な解決策として、そうすることにしました:

CREATE TRIGGER `update_test` AFTER INSERT ON `hello_send` 
FOR EACH ROW 
BEGIN 
SET @dateNameTableNOW =(DATE_FORMAT(NOW(),"%d%m%Y_v")); 
SET @dateNameTableSELECT1 = '06122017_v'; 
SET @dateNameTableSELECT2 = '07122017_v'; 
IF(@dateNameTableNOW = @dateNameTableSELECT1) THEN 
INSERT INTO dbo.06122017_v SET TIME_=NEW.recorded, P1 = NEW.value1 ON DUPLICATE KEY UPDATE TIME_ = NEW.recorded, P1 = NEW.value1; 
END IF; 

IF(@dateNameTableNOW = @dateNameTableSELECT2) THEN 
INSERT INTO dbo.07122017_v SET TIME_=NEW.recorded, P1 = NEW.value1 ON DUPLICATE KEY UPDATE TIME_ = NEW.recorded, P1 = NEW.value1; 
END IF; 


END; 
関連する問題