【问题标题】:How to force sql server to ignore insert on computed column instead of throwing error?如何强制 sql server 忽略计算列上的插入而不是抛出错误?
【发布时间】:2013-03-13 07:19:54
【问题描述】:

我有一个表,我想向其中添加计算列(每个用户的值不同 - 需要权限)。
问题是该表是 Microsoft Dynamics NAV 的一部分,它对计算列一无所知。
我已经掌握了如何欺骗 NAV,以便在 NAV 创建后更改列类型并且可以读取数据。

现在我被插入卡住了。
NAV 不使用可为空的列,因此它总是尝试插入默认值,并且 SQL Server 因计算列错误而失败。
我尝试编写 INSTEAD OF INSERT 触发器,但似乎 SQL Server 在运行触发器之前正在执行检查,但仍然失败并出现错误。

有没有办法强制 SQL Server 忽略计算列上的插入值?

【问题讨论】:

    标签: sql-server calculated-columns navision dynamics-nav


    【解决方案1】:

    我个人不会更改第三方应用程序的架构,尤其是金融系统。您可以创建视图而不是更改表 - 如果需要,您甚至可以在另一个数据库中创建它们 - 包括您的计算列定义,然后将您的 INSTEAD OF 触发器放在视图上并通过视图执行 INSERTs。

    【讨论】:

    • 首先你说不要改变,然后你说创建视图——但你可能不知道将某些表单重新绑定到视图对其他开发人员/顾问来说意味着更大的变化和困惑。此外,我还没有管理如何通过视图实现良好的性能 - 不知何故,当连接到表单时,它们在 NAV 中要慢得多。所以视图不是我现在的选择:-(
    • “更改”是指在表格中添加一列,这是您最初的想法。出于显而易见的原因,修改由另一个应用程序管理的表的结构是有风险的。这就是为什么我建议添加视图,这将是全新的对象,因此更安全;将它们放入第二个数据库并使用 3 部分命名 (SELECT foo from NAV.dbo.SomeTable) 意味着您根本不必接触 NAV 数据库。
    猜你喜欢
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多