此表由前端应用程序定期更新,插入和选择.我想/需要添加日期时间列,例如M_DateModified可以像这样更新:
UPDATE Table SET M_DateModified = GETDATE()
每当在前端按下按钮并调用存储过程时.此列将根据请求添加到现有报告中.
我的问题,答案就是这个.作为我们应用程序的核心表之一,是否会更改表并添加其他列以打破其他现有查询?显然,如果没有为所有列指定所有值,则无法插入到表中,因此任何现有的INSERT查询都将中断(WHICH是一个大问题).
对于这个问题的最佳解决方案,将非常感谢任何帮助.
解决方法
其次,您只需要在INSERT上指定所有非Null字段,因此如果您使其为NULL,则不必担心.此外,对于Created_Date类型的列,通常会添加DEFAULT设置= GetDate(),如果未指定,将为您填充.
第三,如果您仍然担心影响现有的代码库,请执行以下操作:
>将表重命名为“physicalTable”.
>创建一个与您的表所具有的名称相同的视图,它执行SELECT .. FROM physicalTable,以明确且相同的顺序列出列,但不包括M_DateModified字段.
>保持代码不被修改,现在引用View,而不是直接访问表.
现在,您的代码可以安全地与表进行交互而无需任何更改(SQL DML代码无法区分Table和可写的View之间的区别).
最后,这种“ModifiedDate”列是一种常见的需求,并且通常通过使其成为NULL来处理,然后通过添加Insert&更新自动设置的触发器:
UPDATE t SET M_DateModified = GetDate() FROM (SELECT * FROM physicalTable y JOIN inserted i ON y.PkId = i.PkId) As t
这样,应用程序不必维护字段本身.作为一个额外的好处,应用程序也不能错误地或错误地设置它(这是SQL中触发器的常见和可接受的使用).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。