添加新的可空列后,是不是需要更新某个表上的每个 C# SQL 查询?

Posted

技术标签:

【中文标题】添加新的可空列后,是不是需要更新某个表上的每个 C# SQL 查询?【英文标题】:Do I need to update every C# SQL query on a certain table after adding a new nullable column?添加新的可空列后,是否需要更新某个表上的每个 C# SQL 查询? 【发布时间】:2022-01-12 20:17:16 【问题描述】:

我在一个带有 .NET C# 后端的遗留产品上工作,该后端不使用 ORM 来读取/更新我们的数据库。查询是用 C# 编写的,在 .NET SQL 客户端上调用,直接使用 SQL 编写如下:

var query = "INSERT INTO table (column1, column2, column3)" +
             "VALUES (@value1, @value2, @value3)" ;  

我必须向表中添加一个新的可为空的列,并将在几个查询中将该列包含一个值。它是一个位值,默认为空。

我是否必须更新调用该表的每个查询以包含新列?还是我只在需要的地方添加它是安全的?

【问题讨论】:

因为可以为空,所以可以省略。 来自INSERT TSQL docs:“如果列不在 column_list 中,则数据库引擎必须能够根据列的定义提供一个值 [.. .] 如果列:[...] 具有默认值。使用列的默认值。[...] 可以为空。使用空值。" 当心SELECT * 查询,它们会返回额外的列。此外,您应该在所有引用该表的视图和过程上使用 sp_recompile 【参考方案1】:

由于新列有一个默认值,插入时将始终使用该值,即使查询中未使用新列。

你基本上是安全的。使用直接的 ADO.Net 基本上会给您带来很大的优势,不仅在速度方面,而且在常识方面。在这种情况下,一些 ORM 会崩溃

【讨论】:

某些 ORM 在这种情况下会崩溃 - 你有例子吗?

以上是关于添加新的可空列后,是不是需要更新某个表上的每个 C# SQL 查询?的主要内容,如果未能解决你的问题,请参考以下文章

检查可空列是不是稀疏或不在 SQL Server 中查询

没有主键和空列的表上的实体框架反向 poco

如何在 oracle 中使可空列不为空

Entity Framework Core:将可空列迁移到必需时的默认值

使用 C# 8 的可空引用类型

SQL Server 2008 在具有空间索引的可空地理列上的性能