询问者
SQLSERVER 有多个除号的公式如何处理,谢谢!

问题
全部回复
-
判断 b<>0 and D<>-1 and F<>0
SQL Server 2016 ~ 2000 性能优化、方案设计 QQ:315054403 田园嘉兴
这个只是举例,实际上公式很多,这么处理很麻烦,我用下面的方式,查询可以
SET ARITHABORT off
SET ANSI_WARNINGS offSELECT 1/0但是在SELECT语句中加个into tb_xxx就出错了:
消息 1934,级别 16,状态 1,过程 DDLTrigger_Table,行 18 [批起始行 14]
INSERT 失败,因为下列 SET 选项的设置不正确: 'ANSI_WARNINGS'。请确保 SET 选项正确无误,可以用于 计算列上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。
-
判断 b<>0 and D<>-1 and F<>0
SQL Server 2016 ~ 2000 性能优化、方案设计 QQ:315054403 田园嘉兴
这个只是举例,实际上公式很多,这么处理很麻烦,我用下面的方式,查询可以
SET ARITHABORT off
SET ANSI_WARNINGS offSELECT 1/0但是在SELECT语句中加个into tb_xxx就出错了:
消息 1934,级别 16,状态 1,过程 DDLTrigger_Table,行 18 [批起始行 14]
INSERT 失败,因为下列 SET 选项的设置不正确: 'ANSI_WARNINGS'。请确保 SET 选项正确无误,可以用于 计算列上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。
测试了没问题啊
SET ARITHABORT off SET ANSI_WARNINGS off if object_id('tempdb..#t') is not null drop table #t SELECT 1/0 as a into #t select * from #t
结果:
Division by zero occurred.(1 行受影响)
a
-----------
NULL(1 行受影响) -
判断 b<>0 and D<>-1 and F<>0
SQL Server 2016 ~ 2000 性能优化、方案设计 QQ:315054403 田园嘉兴
这个只是举例,实际上公式很多,这么处理很麻烦,我用下面的方式,查询可以
SET ARITHABORT off
SET ANSI_WARNINGS offSELECT 1/0但是在SELECT语句中加个into tb_xxx就出错了:
消息 1934,级别 16,状态 1,过程 DDLTrigger_Table,行 18 [批起始行 14]
INSERT 失败,因为下列 SET 选项的设置不正确: 'ANSI_WARNINGS'。请确保 SET 选项正确无误,可以用于 计算列上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。
测试了没问题啊
SET ARITHABORT off SET ANSI_WARNINGS off if object_id('tempdb..#t') is not null drop table #t SELECT 1/0 as a into #t select * from #t
结果:
Division by zero occurred.(1 行受影响)
a
-----------
NULL(1 行受影响) -
在创建或修改 Transact-SQL 存储过程时,数据库引擎将保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置在执行存储过程时都将被忽略。在创建或更改存储过程时不保存其他 SET 选项(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)。如果存储过程的逻辑取决于特定的设置,则应在过程开头添加一条 SET 语句,以确保设置正确。从存储过程中执行 SET 语句时,该设置只在存储过程完成之前有效。之后,设置将还原为调用存储过程时的值。这样一来,单个客户端就可以设置所需的选项,而不会影响存储过程的逻辑
---------------------
参考联机帮助上的如上说明,你是放错位置了吧?
-
在创建或修改 Transact-SQL 存储过程时,数据库引擎将保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的设置。执行存储过程时,将使用这些原始设置。因此,所有客户端会话的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 设置在执行存储过程时都将被忽略。在创建或更改存储过程时不保存其他 SET 选项(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)。如果存储过程的逻辑取决于特定的设置,则应在过程开头添加一条 SET 语句,以确保设置正确。从存储过程中执行 SET 语句时,该设置只在存储过程完成之前有效。之后,设置将还原为调用存储过程时的值。这样一来,单个客户端就可以设置所需的选项,而不会影响存储过程的逻辑
---------------------
参考联机帮助上的如上说明,你是放错位置了吧?
没放错位置,帮助文档中有这么说:
在对计算列或索引视图创建或更改索引时,SET ARITHABORT 必须为 ON。 如果 SET ARITHABORT 为 OFF,则对包含计算列或索引视图索引的表执行 CREATE、UPDATE、INSERT 和 DELETE 语句时将失败。