2013-12-09 82 views
-1

我想做一個SQL命令來刪除一個表以及另一個表中的一行。外鍵在它所關聯的表中存在。刪除表的時候,因爲它是出現錯誤,我認爲這說法就解決了問題:SQL數據庫命令不起作用?

DELETE FROM [Table] INNER JOIN [Column] WHERE [Table.TableId] = @TableId AND [Column.TableId] = @TableId 

正如我需要調用@TableId我認爲這將是這樣寫的。它不起作用,因爲我測試了它。我認爲ON是需要的,但是我不知道如何使它們等於@TableId。任何建議將是有益的,非常感謝。

+2

錯誤是...? –

+0

關鍵字'INNER'附近的語法不正確。 –

+0

你作爲參數@TableId傳遞嗎?你可以發送你在此行之前寫的內容嗎 –

回答

1

我建議交易,將查詢,像這樣:

BEGIN TRY 
    BEGIN TRANSACTION 
    DELETE FROM [Table] WHERE [Table.TableId] = @TableId 
    DELETE FROM [Column] WHERE [Column.TableId] = @TableId 
    COMMIT 
END TRY 
BEGIN CATCH 
    -- assuming this is the only transaction, omitting detailed error handling 
    ROLLBACK 
END CATCH 
+0

以前從未使用過的交易,但這是正確的方法。代碼顯示在下面。謝謝你的建議。 –

1

的JOIN語法

table1 INNER JOIN table2 ON table1.Column = table2.Column 

所以您的查詢不正確,因爲你沒有提供的信息構建兩個表之間關係的列

+0

該列被稱爲TableId,它們如何相互關聯 –

+0

您剛添加了一個連接,並忘記告訴如何連接這兩個表,您需要設置一個ON子句。 SQL引擎不會爲你猜測你想做什麼。 – jean

0

如果要連接2個表並從其中一個行中刪除行,則需要使用類似這樣的語法:

DELETE m 
FROM [Table] m 
INNER JOIN [Column] c 
ON m.TableId = c.TableId AND 
m.TableId = @TableId 
0

INNER JOINDELETE FROM命令用於刪除根據行一個表中的行與另一個表中,不按順序的同時刪除在兩個表中的行。如果你想從表和表應刪除記錄:

  • 寫兩個DELETE命令
  • 使用帶有級聯的外鍵刪除
  • 使用觸發器
0

在意識到INNER JOIN不是正確的方法之後,我在被Alex建議之後嘗試了交易。

connection.ExecuteInTransaction(c => 
      { 
       c.Execute(new DBCommand("DELETE FROM [Column] WHERE [TableId] = @TableId", new { TableId = table.TableId })); 
       c.Execute(new DBCommand("DELETE FROM [Table] WHERE [TableId] = @TableId", new { TableId = table.TableId })); 
      }); 

這工作完美。