c# - 列名或提供的值的数量与表定义不匹配。默认值?
问题描述
我在数据库中的表中添加了一个新列。我没有更改代码以插入此新列,而是尝试创建此新列以在插入时具有默认值。
ALTER TABLE myTableName
ADD DateColumn SMALLDATETIME DEFAULT GetDate()
DECLARE @Dates SMALLDATETIME
SET @Dates = GetDate()
UPDATE myTableName
SET DateColumn = @Dates
ALTER COLUMN DateColumn SMALLDATETIME NOT NULL
问题是我在上面收到此错误,因为有 13 列,并且多年来未触及的代码仅插入 12 列并且它们不明确(例如
Insert into table ColumnNames Values(values))
这只是平原
insert into table Values (xxx, xxx ,xxx)
如何让插入忽略新列,每次添加新行时只让新列插入默认数据?
解决方案
这听起来有点激进,但您可以执行以下操作:
- 将表重命名为新名称
- 创建一个使用旧名称但没有新列的视图
瞧!该视图将是可更新的,并且旧代码应该可以工作。
insert
注意:如果有一个明确的列列表,这个问题就不会发生。您应该致力于修复代码以及解决问题。
推荐阅读
- scala - 为什么 Scala 编译器会考虑一个类型,而分配给它的值的类型是不同的?
- python - 使用 Altair 通过散点图上的均值绘制线性回归线
- php - 只要不是第 56 行,SQL 查询就会返回行
- python - 使用 Python Folium 创建叶绿素图时出错
- python-3.x - grab_set() 函数在 tkinter 中不起作用
- spring-boot - spring boot 不会自动装配包含事务方法的 inhert 抽象类
- arrays - 使用外部函数“交换”来执行冒泡排序的交换步骤,但在 c 中使用结构数组?
- reactjs - 如何使用 Axios 以表单的形式发布到数据库?
- selenium - Selenium IDE - 导致此错误消息的原因(“无法读取未定义的属性'trim'”)
- google-chrome-devtools - Chrome 开发者工具 - 删除网络标签中不必要的标题