gpt4 book ai didi

c# - 向现有 SQL Server 表添加列 - 影响

转载 作者:太空狗 更新时间:2023-10-29 21:17:54 26 4
gpt4 key购买 nike

我在 SQL Server 中有一个现有表,其中包含现有条目(实际上超过 100 万条)。

此表由前端应用程序定期更新、插入和选择。我想要/需要添加一个 datetime 列,例如M_DateModified 可以像这样更新:

UPDATE Table SET M_DateModified = GETDATE()

每当在前端按下按钮并调用存储过程时。此列将根据要求添加到现有报告中。

我的问题和答案是这样的。作为我们应用程序的核心表之一,更改 表并添加一个额外的列是否会破坏其他现有查询?显然,如果不为所有列指定所有值,就无法插入到表中,因此任何现有的 INSERT 查询都会中断(这是一个大问题)。

对于有关此问题的最佳解决方案,我们将不胜感激。

最佳答案

首先,正如 marc_s 所说,它应该只影响 SELECT * 查询,甚至不一定会影响所有查询。

其次,您只需要在 INSERT 上指定所有非 Null 字段,因此如果您将其设置为 NULL-able,则不必担心那。此外,对于 Created_Date 类型的列,通常添加 =GetDate()DEFAULT 设置,这将填充它你如果没有指定。

第三,如果您仍然担心影响现有代码库,请执行以下操作:

  1. 将您的表重命名为“physicalTable”之类的名称。
  2. 创建一个与您的表以前同名的 View ,执行 SELECT .. FROM physicalTable,以相同的顺序明确列出列,但不包括 M_DateModified 字段。
  3. 保持代码不变,现在引用 View ,而不是直接访问表。

现在您的代码可以安全地与表交互而无需任何更改(SQL DML 代码无法像这样区分表和可写 View 之间的区别)。

最后,这种“ModifiedDate”列是一种常见的需求并且最常被处理,首先是让它可以为空,然后添加一个自动设置它的插入和更新触发器:

UPDATE t
SET M_DateModified = GetDate()
FROM (SELECT * FROM physicalTable y JOIN inserted i ON y.PkId = i.PkId) As t

这样应用程序就不必自己维护字段。作为一个额外的好处,应用程序也不会错误地或错误地设置它(这是 SQL 中常见且可接受的触发器用法)。

关于c# - 向现有 SQL Server 表添加列 - 影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com