c# - 您是否需要在插入中指定所有字段

标签 c# sql-server-2008

当从 C# 执行插入到 SQL Server 表(使用参数化 sql 语句)时,您是否需要在插入语句中指定每个表字段?

我注意到我没有在插入中指定的字段默认为表中设置的默认值。我不知道在我的插入语句中省略字段并让默认值负责设置我不关心的字段是好是坏。它一定没问题,因为它有效。

最佳答案

您需要指定要为其插入值的所有字段。您不必指定表中的所有字段!

正如您所注意到的,任何您未指定但对它们有默认约束的字段都将设置为该定义的默认值。这是一件“好事”(tm) - 当然!这允许您编写更少的 T-SQL 插入代码——所有定义的默认值都将已经设置。我发现这是 SQL Server(以及许多其他关系数据库)的一个很棒的特性——您可以在插入时将“最后修改”日期字段等初始化为“今天”,而不必专门将这些字段添加到您的 INSERT 语句中.

任何既不是 INSERT 语句的一部分,也没有定义默认值的字段都将保留为 NULL。

任何定义为 NOT NULL 的字段必须是 INSERT 语句中字段列表的一部分(以便您为它们提供特定的 NON NULL 值),或者它们必须具有默认约束。

关于c# - 您是否需要在插入中指定所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2276559/

相关文章:

c# - 在关闭不同线程时在其他窗口后面发送的应用程序窗口 (C#)

c# - 使用别名获取列名

sql - 如何在没有事务的情况下回滚

sql - 表的主键是否有索引?

sql-server - SQL Server 2008 - 触发器是否以与登录名/用户相同的权限运行?

sql-server - 仅在 SQL Server 2012 中注释 T-SQL 上的 SQL 语法错误

c# - 查找未调用的代码

javascript - 是否可以使用 Lua/Javascript 脚本使用新变量扩展 C# 对象?

c# - 通过遗传继承的静态成员可访问性

C# 从循环中启动线程抛出 IndexOutOfBoundsException