执行插入时,可以说从C#到SQL Server表(使用参数化的sql语句),是否需要在insert语句中指定每个表字段?
我注意到我在插入中未指定的字段默认为表中设置的默认值。我不知道在插入语句中是否优缺点是省略字段并让默认值设置我不关心的字段。一定是好的,因为它有效。
答案 0 :(得分:5)
您需要指定要为其插入值的所有字段。您不必须指定表格中的所有字段!
正如您所注意到的,您未指定且对其具有默认约束的任何字段都将设置为该定义的默认值。这是一件“好事”(tm) - 当然!这允许您编写更少的T-SQL插入代码 - 所有已定义的默认值都将被设置。我发现这是SQL Server(以及许多其他关系数据库)的一个很棒的功能 - 您可以在插入时将“最后修改”日期字段等内容初始化为“今天”,而无需将这些字段专门添加到INSERT语句中
任何既不是INSERT语句的一部分也没有定义默认值的字段将保留为NULL。
任何定义为NOT NULL的字段都必须是INSERT语句中字段列表的一部分(以便为它们指定特定的NON NULL值),或者它们必须具有默认约束。
答案 1 :(得分:2)
这不是特定于C#或.NET的行为。
对于大多数数据库,从INSERT语句中省略的任何字段都将分配默认值,或者如果nullable存储为NULL。这是标准的,预期的行为。
至于这是好还是坏 - 取决于。就个人而言,我更喜欢在我插入的任何表中指定所有字段的值,以便将来维护者意识到我选择通过意图插入值。但是,在某些情况下,应用程序无法设置计算或基于触发器的列 - 在这种情况下,我允许数据库处理此问题。
如果您真的想要彻底和清晰 - 您可以通过存储过程执行所有INSERT - 这样,知识就会在数据库层中捕获,并且可以被任何相互作用的应用程序利用与数据库。
答案 2 :(得分:0)
是的,如果默认值足够好,可以在insert语句中省略字段。
答案 3 :(得分:0)
很好看,因为它的工作原理,如果它想要实现它,那就没关系。如果你有可以使用默认值的可空字段和字段,并且没有任何内容可以放入其中 - 那就好了。
答案 4 :(得分:0)
这是defaults
值的含义。他们帮助你
答案 5 :(得分:0)
如果默认值是您要插入的记录的正确值,则可以。我担心的是你把它们当作你不关心的领域。你应该关心它们的内容;它可能会导致严重的数据问题而无需关心。那些领域是有原因的;你需要了解默认值的含义以及它们是否合适。