2017-02-21 3 views
0

SQLでテーブルを削除する前にテーブルが存在するかどうかを確認する必要があります。私はインターネットからいくつかのことを試してきましたが、これは一番うまくいくようですが、うまくいきません。存在するかどうかを確認した後にテーブルから削除する

IF OBJECT_ID('mytable', 'N') IS NOT NULL 
BEGIN 
    DELETE FROM table WHERE user_id= :user_id 
END 

私はエラーを取得する:

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF OBJECT_ID('we_image_gallery', 'U') IS NOT NULL DELETE FROM mytable' at line 1 

私は、現在のデータベースを使用して、スクリプトが複数のシステムに移植されたときに、私が上で数えることができるソリューションを必要としています。

編集:このクエリはPHP PDOによって実行されます。存在しない答えが存在するのは、問題を引き起こしているpdoまたはsqlサーバーに設定がある可能性があるということですか?

+0

この種の問題は、悪い設計の徴候です。 – Strawberry

+0

実際には別の疑問が生じます。どのテーブルが作成されたかを格納する余分なテーブルを作成すること(異なる場所に異なるアドオンをインストールすることによって)を作成し、それを使用してテーブルをチェックするか、SQLを使用してテーブルをチェックする現在のシステムステートメント。 – Zaper127

+0

あなたの現在のシステムはひどいですが、あなたの提案された選択肢と同じように悪いです。データベースにどのテーブルが存在するかを知っておく必要があります。推測の問題ではありません。 – Strawberry

答えて

0
Using Exists statement to delete data from table: 

IF EXISTS(SELECT 1 FROM Your_table WHERE user_id = user_id) 
BEGIN 
    DELETE FROM Your_table WHERE user_id= user_id 
END 

Delete table from database : 

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA =  
    'TheSchema' AND TABLE_NAME = 'TheTable') 
BEGIN 
    --Your delete statement 
END 
+0

それは動作しませんでした。私は私の質問にいくつかの情報を追加しました。 – Zaper127

0

あなたはでテーブル名を与えることによって、任意のテーブルのためのINFORMATION_SCHEMA.TABLESで確認することができますwhere句と、そのテーブルがその後、存在する場合は、以下のようにあなたに必要な操作を実行できます。

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
     WHERE TABLE_NAME = N'tbl_User') 
BEGIN 
--If table exist you can perform your operation here 
-- DELETE FROM table WHERE user_id= :user_id 
Print 'Table Exists' 

END 
+0

それは動作しませんでした。私は私の質問にいくつかの情報を追加しました。 – Zaper127

0

MySQLは動的SQLパーサーのIFステートメントをサポートしていません。 flow-control statementsは、ストアドルーチンまたはトリガーの本体でのみ使用できます。

私はここで2つの戦略の1つを提案します。 1つのオプションは、単に DELETEのようなステートメントを試すが、エラーをチェックすることです。または、PDO例外を有効にしている場合は例外をキャッチします。

try { 
    $pdo->exec("DELETE ..."); 
} catch (PDOException $e) { 
    error_log("SQL statement on $mytable failed: ".$e->getMessage()); 
} 

SQL statement on mytable failed: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.mytable' doesn't exist

別の戦略は、テーブルを照会し、それが/存在しないなければ何かをするだろう。

try { 
     $stmt = $pdo->query("SHOW TABLES LIKE 'mytable'"); 
     if (!$stmt->fetchColumn()) { 
       error_log("No such table 'mytable'"); 
     } 
} catch (PDOException $e) { 
     echo "SQL statement failed: " . $e->getMessage() . "\n"; 
} 
関連する問題