Sql server 如何强制sql server忽略计算列上的insert而不是抛出错误?

Sql server 如何强制sql server忽略计算列上的insert而不是抛出错误?,sql-server,calculated-columns,navision,dynamics-nav,Sql Server,Calculated Columns,Navision,Dynamics Nav,我有一个表,我想向其中添加计算列(每个用户的值不同,这是权限所需的)。 问题是该表是Microsoft Dynamics NAV的一部分,它对计算列一无所知。 我已设法欺骗NAV,以便在NAV创建列类型后更改列类型,并读取数据。 现在我被插页卡住了。 NAV不使用可为空的列,因此它总是尝试插入默认值,SQL Server将在计算列上失败并出现错误。 我尝试写入而不是插入触发器,但似乎SQL Server正在运行触发器之前进行检查,但仍然失败并出现错误。 有没有办法强迫SQL Server忽略计

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

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


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

我个人不会更改第三方应用程序的架构,尤其是金融系统。您可以创建包含计算列定义的视图(如果需要,您甚至可以在另一个数据库中创建视图),而不是更改表,然后在视图上放置
而不是
触发器,并在视图中插入

首先,您说不要更改,然后你说创建视图——但你可能不知道重新绑定某个表单来查看对其他开发人员/顾问来说意味着更大的改变和混乱。此外,我还没有设法实现视图的良好性能-当连接到表单时,它们的导航速度要慢得多。因此,视图现在不是我的选择:-(通过“更改”我的意思是向表中添加列,这是您最初的想法。修改由另一个应用程序管理的表的结构是有风险的,原因很明显。这就是为什么我建议添加视图,这将是全新的对象,因此更安全;将它们放入第二个数据库并使用三部分命名(
从NAV.dbo.SomeTable中选择foo
)意味着您根本不必接触NAV数据库。