2010-02-16 56 views
3

當執行插入讓C#進入SQL Server表(使用參數化的sql語句)時,是否需要指定insert語句中的每個表字段?您是否需要指定插入中的所有字段

我注意到,我沒有在插入時指定的字段默認設置爲表中設置的默認值。我不知道在插入語句中,這是好還是不好,以避免出現字段,並讓默認設置來關心設置我不關心的字段。它一定是好的,因爲它可以工作。

+0

您有問題嗎? – SLaks

+0

「你需要指定每個字段嗎?」 – PositiveGuy

+0

@SLaks ...他的問題在第一行。 「你需要指定每個領域?」 –

回答

5

您需要指定要爲其插入值的所有字段。你做不是必須指定表中的所有字段!

如您所注意到的,您沒有指定的任何字段以及對它們具有默認約束的字段都將設置爲該默認值。這是一件「好事」(tm) - 當然!這使您可以編寫更少的T-SQL插入代碼 - 所有已定義的默認值都將被設置。我發現這是SQL Server(以及許多其他關係數據庫)的一個很好的功能 - 您可以在插入時將「最後修改的」日期字段初始化爲「today」,而無需專門將這些字段添加到INSERT語句中。

任何既不是INSERT語句部分也沒有定義默認值的字段將保留NULL。

定義爲NOT NULL的任何字段必須是INSERT語句中字段列表的一部分(以便給它們一個特定的NON NULL值),或者它們必須具有默認約束。

+0

謝謝,我只是不想認爲這是所有罰款和花花公子,即使由表屬性初始化。 – PositiveGuy

2

這不是特定於C#或.NET的行爲。

對於大多數數據庫,從INSERT語句中省略的任何字段都被指定爲默認值,或者如果可爲空,則存儲爲NULL。這是標準的和預期的行爲。

至於這是好還是壞 - 它取決於個人而言,我更願意指定我插入的任何表中的所有字段的值,以便將來的維護人員意識到我選擇了通過意圖插入值。但是,在某些情況下,應用程序無法設置計算或基於觸發器的列 - 在這種情況下,我允許數據庫處理此問題。

如果您真的想徹底清楚 - 您可以通過存儲過程執行所有的INSERT操作 - 這樣知識就會被捕獲到數據庫層中,並且可以被任何與數據庫交互的應用程序利用。

0

是的,如果默認值對您來說足夠好,可以在插入語句中省略字段。

0

嗯,看到它的作品,它的好,如果它你想達到什麼。如果你的空字段和字段有默認值,並且沒有放置它們 - 那很好。

0

這就是defaults的值。他們幫助你

  • 節省您的時間
  • 避免寫不必要的代碼
0

如果默認值是是您要插入的記錄正確的價值觀,是罰款。我擔心的是你將它們作爲你不關心的領域來談論它們。你應該關心進入他們的東西;它會導致嚴重的數據問題而不在意。那些地方是有原因的;您需要了解違約意味着什麼,以及它們是否合適。

相關問題