Sql-Server
SELECT * 在生產程式碼中有什麼好的案例?
出於習慣,我從不
SELECT *
在生產程式碼中使用它(我只將它用於臨時廢料查詢,通常是在學習對象的模式時)。但是我現在遇到了一個案例,我很想使用它,但如果我這樣做會覺得很便宜。我的案例是在儲存過程中創建本地臨時表,該表應始終與用於創建它的基礎表匹配,只要儲存過程執行。臨時表是稍後填充的,因此快速創建臨時表而不是冗長的方法
SELECT * INTO #TempTable FROM RealTable WHERE 1 = 0
尤其適用於具有數百列的表。如果我的儲存過程的使用者不知道動態結果集,那麼我將服務出售給 是否有任何問題
SELECT *
?
我通常在生產程式碼中厭惡 SELECT *,並且我一直處於使用它導致以後大量返工的情況。不過,您的案例確實看起來很合理。
我發現 SELECT * 是必須的地方 - 以及它的邪惡表親“INSERT INTO tbl”沒有列列表 - 處於歸檔情況,其中行被移動到另一個必須具有相同結構的表中。
INSERT INTO SalesOrderArchive -- Note no column list SELECT * FROM SalesOrder WHERE OrderDate < @OneYearAgo DELETE FROM SalesOrder WHERE OrderDate < @OneYearAgo
如果將來將新列添加到 SalesOrder,但未添加到 SalesOrderArchive,則 INSERT 將失敗。這聽起來很糟糕,但它實際上是一件非常好的事情!因為替代方案更糟糕。如果所有列都列在 INSERT 和 SELECT 上,那麼 INSERT 會成功,下面的 DELETE 也會成功(實際上是“DELETE *”)。成功的生產程式碼不會引起任何注意,並且可能需要很長時間才能有人注意到新列沒有被歸檔,而是被完全刪除。