Sql-Server
Sql Server 刪除語法
我最近遇到了一個我不知道的刪除語法。
delete #fooTbl from #fooTbl where attr ='some'
微軟官方文件指出:
DELETE FROM [database_name . [ schema ] . | schema. ] table_name [ WHERE <search_condition> ] [ OPTION ( <query_options> [ ,...n ] ) ] [; ]
我對我寫的命令有些困惑:
- delete 關鍵字之前的參數是什麼以及需要什麼(在我的範例中與表名一致)?
- 最佳做法是什麼?
delete 關鍵字之前的參數是什麼以及需要什麼(在我的範例中與表名一致)?
由於您可以
DELETE FROM
使用INNER JOIN
.
#footbl
一個從inner join
另一個表中刪除的簡單範例DELETE FT FROM #DifferentTable DT INNER JOIN #fooTbl FT ON DT.attr = FT.attr WHERE FT.attr ='some';
而這會由於未指定要刪除的表而產生錯誤
DELETE FROM #DifferentTable AS DT INNER JOIN #fooTbl AS FT ON DT.attr = FT.attr WHERE FT.attr ='some';
消息 156,級別 15,狀態 1,第 45 行關鍵字“AS”附近的語法不正確。
這也有效
DELETE #fooTbl FROM #DifferentTable AS DT INNER JOIN #fooTbl AS FT ON DT.attr = FT.attr WHERE FT.attr ='some';
簡而言之,如果您要引用多個表,則需要指定要從中刪除的別名/表,但是當您只引用一個時,您不必這樣做。
最佳做法是什麼?
就最佳實踐而言,我認為這對單表來說並不重要。別名可用於更輕鬆地調整/重用腳本。
Microsoft 文件中的更多範例
兩次使用表名
DELETE FROM Sales.SalesPersonQuotaHistory FROM Sales.SalesPersonQuotaHistory AS spqh INNER JOIN Sales.SalesPerson AS sp ON spqh.BusinessEntityID = sp.BusinessEntityID WHERE sp.SalesYTD > 2500000.00;
使用別名
DELETE spqh FROM Sales.SalesPersonQuotaHistory AS spqh INNER JOIN Sales.SalesPerson AS sp ON spqh.BusinessEntityID = sp.BusinessEntityID WHERE sp.SalesYTD > 2500000.00;
兩者的目的完全相同。