Sql server CF_SQL_十进制和CF_SQL_数字之间的细微差别
Sql server CF_SQL_十进制和CF_SQL_数字之间的细微差别,sql-server,coldfusion,qoq,Sql Server,Coldfusion,Qoq,CF\u SQL\u DECIMAL和CF\u SQL\u NUMERIC之间有什么细微差别?听起来他们都接受一个名为scale(per)的参数 如果我在查询中为其中一个提供一个整数,会有区别吗? 如果没有,哪一个更好 快一点吗 他们有不同的取整方法吗 我在查询查询(QoQ)和MS-SQL查询中都使用了这些属性。如果您想知道使用哪个cfsqltype,它由目标列的数据类型决定。您发布的链接来自文档的一个非常旧的版本。较新的包括一个。对于SQL Server,它列出了以下映射: 对于DECIM
CF\u SQL\u DECIMAL
和CF\u SQL\u NUMERIC
之间有什么细微差别?听起来他们都接受一个名为scale
(per)的参数
我在查询查询(QoQ)和MS-SQL查询中都使用了这些属性。如果您想知道使用哪个
cfsqltype
,它由目标列的数据类型决定。您发布的链接来自文档的一个非常旧的版本。较新的包括一个。对于SQL Server,它列出了以下映射:
- 对于
列,使用DECIMAL
CF\u SQL\u DECIMAL
- 对于
列,使用NUMERIC
CF\u SQL\u NUMERIC
值
和所需的刻度
:
<cfqueryparam value="#someNumber#" scale="2" cfsqltype="cf_sql_decimal">
... OR ....
<cfqueryparam value="#someNumber#" scale="2" cfsqltype="cf_sql_numeric">
... 或
关于比例的说明:
- 如果省略,则
刻度默认为零(0)。这意味着所有的小数位都被删除了
- 指定时,
必须是大于零的整数,并且显然不应超过目标列的scale
精度(存储的总位数)
值
转换为对象。最后,它将SQL发送到数据库执行。这就是CF的参与程度。其余的由数据库处理。因此,任何行为细微差别都可能是特定于数据库/驱动程序的
如果在查询中为其中一个提供整数,会有区别吗?他们有不同的取整方法吗?
我认为没有一个全面的答案。总的来说,大多数数据库都有类似的十进制/数字数据类型处理。但是,具体细节可能因数据库/驱动程序而异。因此,您需要查看数据库的文档
SQLServer的文档中说。(尽管在其他地方,他们区分说“功能上”等同)。因此,他们应该以同样的方式行事。我的看法是,如果一个回合,另一个也会,溢出的情况也是一样。有关详细信息,请参阅:
- 默认情况下,SQL Server在将数字转换为精度和小数位数较低的十进制或数值时使用舍入。然而,如果
选项为SET ARITHABORT
,SQL Server在 发生溢出。仅损失精度和比例不足以 提出错误ON
- 从
,int
。。。无论是smallint
还是decimal
都可能导致溢出numeric
cfsqltype
在查询查询(QoQ)和MS-SQL查询中。
QoQ与数据库查询完全不同。他们也知道有点。。。有时很古怪。您最好查看文档:感谢您有条理、深思熟虑的回复。不过,我仍然对舍入/截断感到困惑。你说它取决于数据库,但这是否意味着CF正在将刻度传递给db,并让它担心转换/截断/舍入?是的,数据库处理实际的舍入。(说到查询,CF的角色只不过是一个信使。它只是打包SQL,然后将所有内容交给数据库。之后,所有内容都由数据库/驱动程序控制)。如果在DSN中启用日志记录,则可以看到此操作。运行一个简单的查询,如
SELECT AS DecimalValue
(续)。日志将显示CF实际将完整值传递给数据库/驱动程序spy(..)>>x=150.698634561297
。然后,数据库执行sql并最终将取整后的结果150.70
返回给CFC。感谢您的帮助。我不是数据库架构师,所以我可能永远也不会意识到我可以记录它并检查它。非常感谢!欢迎:)Dsn日志记录与a相结合是学习查询准备和执行的好工具。