bea*_*an5 5 sql-server coldfusion qoq
CF_SQL_DECIMAL和之间有什么细微差别CF_SQL_NUMERIC?听起来他们都接受了一个名为的参数scale(根据http://csis.pace.edu/~ctappert/cs615-02/support/Help/CFML_Language_Reference/lang_0277.htm).
我在查询查询(QoQ)和MS-SQL查询中都使用它们.
如果您想知道cfsqltype要使用哪个,则由目标列的数据类型决定.您发布的链接来自文档的旧版本.较新的包括大多数主要数据库的矩阵.对于SQL Server,它列出了以下映射:
DECIMAL列CF_SQL_DECIMALNUMERIC列CF_SQL_NUMERIC 用法很简单.只需提供value和期望scale:
<cfqueryparam value="#someNumber#" scale="2" cfsqltype="cf_sql_decimal">
... OR ....
<cfqueryparam value="#someNumber#" scale="2" cfsqltype="cf_sql_numeric">
Run Code Online (Sandbox Code Playgroud)
关于规模的说明:
scale默认为零(0).意味着删除所有小数位.scale必须是大于零的整数,显然不应超过precision目标列的(存储的总位数)CF_SQL_DECIMAL和CF_SQL_NUMERIC之间有什么细微差别?
从CF的角度来看,它们基本相同.CFQueryparam只是验证输入(数字,范围内等),并将其转换value为java.math.BigDecimal对象.最后,它将SQL发送到数据库以供执行.这就是CF参与的程度.其余部分由数据库处理.因此任何行为细微差别都可能是数据库/驱动程序特定的.
如果我要在查询中为任何一个提供整数,那会有区别吗?他们有不同的舍入方法吗?
我不认为全面都有一个答案.总的来说,大多数数据库都有类似的十进制/数字数据类型处理 但是,具体细节可能因您的数据库/驱动程序而异.因此,您需要查看数据库的文档.
SQL Server的文档说"这些decimal和numeric类型完全相同."(尽管在其他地方,它们的区别在于"在功能上"等同于.)因此它们的行为方式应该相同.我对它的看法是一轮,另一轮也将与溢出相同.有关更多详细信息,请参阅:decimal和numeric(Transact-SQL).
默认情况下,SQL Server在将数字转换为具有较低精度和比例的小数或数值时使用舍入.但是,如果
SET ARITHABORT选项是ON,SQL Server会在发生溢出时引发错误.仅精度和规模的损失不足以引起错误.从
int,转换为smallint...decimal或者numeric可能导致溢出.
虽然在这种情况下您可能使用cfsqltype,但最好再遵循API.使用cfsqltype哪个映射到目标列的数据类型.
在查询查询(QoQ)和MS-SQL查询中.
QoQ是一个完全不同于数据库查询的野兽.众所周知,他们有点古怪.最好的办法是查看文档:查询查询用户指南