全球旧事资料 分类
接受2个或3个参数。因此,下列两个例子都是正确的:
fSELECTCONVERTVarchar20GETDATESELECTCONVERTVarchar20GETDATE101
这个函数的第一个参数是数据类型Varchar20,第2个参数是另一个函数GETDATE。GETDATE函数用datetime数据类型将返回当前的系统日期和时间。第2条语句中的第3个参数决定了日期的样式。这个例子中的101指以mmddyyyy格式返回日期。本章后面将详细介绍GETDATE函数。即使函数不带参数或者不需要参数,调用这个函数时也需要写上一对括号,例如GETDATE函数。注意在书中使用函数名引用函数时,一定要包含括号,因为这是一种标准形式。
确定性函数
由于数据库引擎的内部工作机制,SQLServer必须根据所谓的确定性,将函数分成两个不同的组。这不是一种新时代的信仰,只和能否根据其输入参数或执行对函数输出结果进行预测有关。如果函数的输出只与输入参数的值相关,而与其他外部因素无关,这个函数就是确定性函数。如果函数的输出基于环境条件,或者产生随机或者依赖结果的算法,这个函数就是非确定性的。例如,GETDATE函数是非确定性函数,因为它不会两次返回相同的值。为什么要把看起来简单的事弄得如此复杂呢?主要原因是非确定性函数与全局变量不能在一些数据库编程对象中使用如用户自定义函数。部分原因是SQLServer缓存与预编译可执行对象的方式。例如,即席查询可以使用任何函数,不过如果打算构建先进的、可重用的编程对象,理解这种区别很重要。
以下这些函数是确定性的:
AVG所有的聚合函数都是确定性的
CAST
CONVERT
DATEADD
DATEDIFF
fASCII
CHAR
SUBSTRING
以下这些函数与变量是非确定性的:
GETDATE
ERROR
SERVICENAME
CURSORSTATUS
RAND
在函数中使用用户变量
变量既可用于输入,也可用于输出。在TSQL中,用户变量以符号开头,用于声明为特定的数据类型。可以使用SET或者SELECT语句给变量赋值。以下的例子用于将一个i
t类型的变量MyNumber传递给SQRT函数:
DECLAREMyNumberi
tSETMyNumber144SELECTSQRTMyNumber
结果是12,即144的平方根。
f用SET给变量赋值
以下例子使用另一个i
t型的变量MyResult,来捕获该函数的返回值。这个技术类似于过程式编程语言中的函数调用样式,即把SET语句和一个表达式结合起来,给参数赋值:
DECLAREMyNumberi
tMyResulti
tSETMyNumber144Assig
thefu
ctio
resulttothevariableSETMyResultSQRTMyNumberRetur
thevariablevalueSELECTMyResult
用SELECT给变量赋值
使用SELECTr
好听全球资料 返回顶部