当前位置:文档之家› SQL中的全局变量和局部变量.

SQL中的全局变量和局部变量.

SQL中的全局变量和局部变量在SQL中,我们常常使用临时表来存储临时结果,对于结果是一个集合的情况,这种方法非常实用,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,另外,当一个SQL语句中的某些元素经常变化时,比如选择条件,(至少我想)应该使用局部变量。

当然MS SQL Server的全局变量也很有用。

>>>>局部变量声明:DECLARE @local_variable data_type@local_variable 是变量的名称。

变量名必须以 at 符 (@) 开头。

data_type 是任何由系统提供的或用户定义的数据类型。

变量不能是 text、ntext 或 image 数据类型。

示例:use masterdeclare @SEL_TYPE char(2)declare @SEL_CUNT numeric(10)set @SEL_TYPE = 'U'/*user table*/set @SEL_CUNT = 10/*返回系统中用户表的数目*/select @SEL_CUNT = COUNT(*)from sysobjectswhere type = @SEL_TYPEselect @SEL_CUNT as 'User table ''s count'如果要返回系统表的数目,可以用set @SEL_TYPE = 'S'可能这个例子并不能说明使用变量的好处,我只是想说明使用方法。

当一组(几个甚至几十个)SQL语句都使用某个变量时,就能体会到他的好处了。

>>>>全局变量全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。

下面是我统计了一些较为常用的变量。

@@CONNECTIONS返回自上次启动以来连接或试图连接的次数。

@@CURSOR_ROWS返回连接上最后打开的游标中当前存在的合格行的数量(返回被打开的游标中还未被读取的有效数据行的行数)@@DATEFIRST返回每周第一天的数字@@ERROR返回最后执行的SQL 语句的错误代码。

@@FETCH_STATUS返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。

@@IDENTITY返回最后插入的标识值@@LANGID返回当前所使用语言的本地语言标识符(ID)。

@@LANGUAGE返回当前使用的语言名。

@@LOCK_TIMEOUT返回当前会话的当前锁超时设置,单位为毫秒。

@@PROCID返回当前过程的存储过程标识符 (ID) 。

@@ROWCOUNT返回受上一语句影响的行数。

@@SERVERNAME返回运行的本地服务器名称。

@@SPID返回当前用户进程的服务器进程标识符 (ID)。

@@TRANCOUNT返回当前连接的活动事务数。

@@VERSION返回当前安装的日期、版本和处理器类型。

@@CPU_BUSY返回自SQL Server 最近一次启动以来CPU 的工作时间其单位为毫秒@@DATEFIRST返回使用SET DATEFIRST 命令而被赋值的DATAFIRST 参数值SET DATEFIRST,命令用来指定每周的第一天是星期几@@DBTS返回当前数据库的时间戳值必须保证数据库中时间戳的值是惟一的@@ERROR返回执行Transact-SQL 语句的错误代码@@FETCH_STATUS返回上一次FETCH 语句的状态值@@IDLE返回自SQL Server 最近一次启动以来CPU 处于空闭状态的时间长短单位为毫秒@@IO_BUSY返回自SQL Server 最近一次启动以来CPU 执行输入输出操作所花费的时间其单位为毫秒@@LANGID返回当前所使用的语言ID 值@@LANGUAGE返回当前使用的语言名称@@LOCK_TIMEOUT返回当前会话等待锁的时间长短其单位为毫秒@@MAX_CONNECTIONS返回允许连接到SQL Server 的最大连接数目@@MAX_PRECISION返回decimal 和numeric 数据类型的精确度@@NESTLEVEL返回当前执行的存储过程的嵌套级数初始值为0@@OPTIONS返回当前SET 选项的信息@@PACK_RECEIVED返回SQL Server 通过网络读取的输入包的数目@@PACK_SENT返回SQL Server 写给网络的输出包的数目@@PACKET_ERRORS返回网络包的错误数目@@PROCID返回当前存储过程的ID 值@@REMSERVER返回远程SQL Server 数据库服务器的名称@@SERVICENAME返回SQL Server 正运行于哪种服务状态之下如MSSQLServer MSDTC SQLServerAgent@@SPID返回当前用户处理的服务器处理ID 值@@TEXTSIZE返回SET 语句的TEXTSIZE 选项值SET 语句定义了SELECT 语句中text 或image数据类型的最大长度基本单位为字节@@TIMETICKS返回每一时钟的微秒数@@TOTAL_ERRORS返回磁盘读写错误数目@@TOTAL_READ返回磁盘读操作的数目@@TOTAL_WRITE返回磁盘写操作的数目@@TRANCOUNT返回当前连接中处于激活状态的事务数目常用函数----统计函数----AVG --求平均值COUNT --统计数目MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求工资最高的员工姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/SIN(float_expressiοn) --返回以弧度表示的角的正弦COS(float_expressiοn) --返回以弧度表示的角的余弦TAN(float_expressiοn) --返回以弧度表示的角的正切COT(float_expressiοn) --返回以弧度表示的角的余切/***反三角函数***/ASIN(float_expressiοn) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expressiοn) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expressiοn) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expressiοn1,float_expressiοn2)--返回正切是float_expressiοn1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expressiοn)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expressiοn) --把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expressiοn) --返回表达式的指数值LOG(float_expressiοn) --返回表达式的自然对数值LOG10(float_expressiοn)--返回表达式的以10 为底的对数值SQRT(float_expressiοn) --返回表达式的平方根/***取近似值函数***/CEILING(numeric_expressiοn) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expressiοn) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expressiοn) --返回以integer_expressiοn 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expressiοn) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expressiοn) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π 即3.1415926535897936RAND([integer_expressiοn]) --用任选的[integer_expressiοn]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全部转换为小写UPPER() --函数把字符串全部转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{'} quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expressiοn 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2) replicate( 'abc', 0)运行结果如下----------- -----------abcabcabc NULL [空]*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------- -----------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST()函数语法如下CAST() (<expressiοn> AS <data_ type>[ length ])CONVERT()函数语法如下CONVERT() (<data_ type>[ length ], <expressiοn> [, style])select cast(100+99 as char) convert(varchar(12), getdate())运行结果如下------------------------------ ------------199 Jan 15 2000----日期函数----DAY() --函数返回date_expressiοn 中的日期值MONTH() --函数返回date_expressiοn 中的月份值YEAR() --函数返回date_expressiοn 中的年份值DATEADD(<datepart> ,<number> ,<date>)--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF(<datepart> ,<number> ,<date>)--函数返回两个指定日期在datepart 方面的不同之处DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理日期ISNULL(<check_expressiοn>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(<expressiοn1>, <expressiοn2>)--NULLIF 函数在expressiοn1 与expressiοn2 相等时返回NULL 值若不相等时则返回expressiοn1 的值。

相关主题