马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先说DDL的分类。有一类DDL,是不需要重建表的,比如加非聚簇索引。这类操作其实不会丢数据,也是在原表上直接操作,对于我们“以恢复数据为目的”的闪回,是可以先忽略的。另外一类,则是会影响到表数据的操作。8、体系函数
体系函数用于猎取有关盘算机体系、用户、数据库和数据库工具的信息。体系函数可让用户在失掉信息后,利用前提语句,依据前往的信息举行分歧的操纵。与别的函数一样,能够在SELECT语句的SELECT和WHERE子句和表达式中利用体系函数。
・APP_NAME()
APP_NAME()函数语法以下:
APP_NAME()
APP_NAME()函数前往当爸葱械挠τ贸绦虻拿啤F浞祷刂道嘈臀nvarchar(128)。
例4-77:测试以后使用程序是不是为SQLServerQueryAnalyzer
・COALESCE()
COALESCE()函数语法以下:
COALESCE(<expression>[,...n])
COALESCE()函数前往浩瀚表达式中第一个非NULL表达式的值。假如一切的表达式均为NULL,则COALESCE()函数前往NULL值。COALESCE()函数等效于上面的CASE语句:
CASE
WHEN(expression1ISNOTNULL)THENexpression1
…
WHEN(expressionNISNOTNULL)THENexpression
ELSENULL
例4-78:
・COL_LENGTH()
COL_LENGTH()函数语法以下:
COL_LENGTH(<table_name>,<column_name>)
COL_LENGTH()函数前往表中指定字段的长度值。其前往值为INT范例。
例4-79:
・COL_NAME()
COL_NAME()函数语法以下:
COL_NAME(<table_id>,<column_id>)
COL_NAME()函数前往表中指定字段的称号,即列名。其前往值为SYSNAME范例。个中table_id和column_id都是INT范例的数据,函数用table_id和column_id参数来天生列名字符串。关于怎样取得table_id和column_id,请拜见OBJECT_ID()函数。
例4-80:
・DATALENGTH()
DATALENGTH()函数语法以下:
DATALENGTH(<expression>)
DATALENGTH()函数前往数据表达式的数据的实践长度。其前往值范例为INT。DATALENGTH()函数对VARCHAR、VARBINARY、TEXT、IMAGE、NVARCHAR和NTEX等能存储变化长度数据的数据范例出格有用。NULL的长度为NULL。
例4-81:
・DB_ID()
DB_ID()函数语法以下:
DB_ID([database_name])
DB_ID()函数前往数据库的编号。其前往值为SMALLINT范例。假如没有指定database_name,则前往以后数据库的编号。
例4-82:
・DB_NAME()
DB_NAME()函数语法以下:
DB_NAME(database_id)
DB_NAME()函数前往数据库的称号.其前往值范例为NVARCHAR(128).database_id是SMALLINT范例的数据.假如没有指定database_id,则前往以后数据库的称号.
例4-83:
・FORMATMESSAGE()
FORMATMESSAGE()函数语法以下:
FORMATMESSAGE(<message_number>,<param_value>[,...n])
FORMATMESSAGE()函数用于从体系信息表sysmessages中选择一条现存的信息,
再将其格局转换为用户必要的情势.其功效相似于RAISERROR命令,分歧的是RAISERROR命令当即打印出信息,而FORMATMESSAGE()函数前往编纂过的信息给挪用它的程序.其前往值范例为NVARCHAR.
个中message_number是存储在sysmessages体系表中的信息ID号.param_value是在信息中利用的参数.最多可以使用20个参数.
FORMATMESSAGE()函数查找利用以后言语平台言语的信息,假如没有当地言语的信息,则利用U.S.English版本言语的信息.
例4-84:假定有一个编号为10001的信息存储在sysmessages表中,此信息的内容为"TheLengthofrows%column_namein%table_nameis%column_num.".FORMATMESSAGE()函数用值myColumn、myTable和20分离替换上述参数值,将了局存储在变量@test1中.程序以下:
declare@test1varchar(100)
select@test1=formatmessage(10001,myColumn,myTable,20)
・GETANSINULL()
GETANSINULL()函数语法以下:
GETANSINULL()([database_name])
GETANSINULL()函数前往以后数据库默许的NULL值.其前往值范例为INT.GETANSINULL()函数对ANSI空值NULL前往1;假如没有界说ANSI空值,则前往0.
例4-85:
selectgetansinull(pangu)
运转了局以下:
------
1
・HOST_ID()
HOST_ID()函数语法以下:
HOST_ID()
HOST_ID()函数前往服务器端盘算机的称号.其前往值范例为NCHAR.
例4-86:
declare@hostIDchar(8)
select@hostID=host_id()
print@hostID
运转了局以下:
-606771
・HOST_NAME()
HOST_NAME()函数语法以下:
HOST_NAME()
HOST_NAME()函数前往服务器端盘算机的称号.其前往值范例为CHAR(8).
例4-87:
declare@hostNAMEnchar(20)
select@hostNAME=host_name()
print@hostNAME
运转了局以下:
XUJIN
・IDENTITY()
IDENTITY()函数语法以下:
IDENTITY(<data_type>[,seed,increment])[AScolumn_name])
IDENTITY()函数只在SELECT...INTO语句中利用,用于拔出一个identitycolumn列到新表中.其前往值范例与data_type的范例不异.
个中:
data_type指定命据范例.datatype是INTEGER或DECIMAL类的数据范例.Seed指定identitycolumn的初值,即第一个值.Increment指定增添一个纪录时,纪录的identitycolumn值应在前纪录的基本上增添的值.seed和increment的缺省值为1.column_name是所拔出的identitycolumn的列名.固然AScolumn_name为可选项,但因为函数在表中拔出了一个新列,以是必需指定列名.假如不利用AScolumn_name选项,可使用以下两种体例来指定列名:
(1)selectidentity(int,1,1)ascolumn_name
intonewtable
fromoldtable
(2)selectcolumn_name=identity(int,1,1)
intonewtable
fromoldtable
有关identitycolumn的信息,请拜见"办理数据库表"中的"列属性"章节.
・IDENT_INCR()
IDENT_INCR()函数语法以下:
IDENT_INCR(table_or_view)
IDENT_INCR()函数前往表中标识性字段identitycolumn的增量.若无此字段,则前往NULL值.其前往值范例为NUMERIC.
例4-88:
・IDENT_SEED()
IDENT_SEED()函数语法以下:
IDENT_SEED(<table_or_view>)
IDENT_SEED()函数前往表中标识性字段identitycolumn的初值.若无此字段,则前往NULL值.其前往值范例为NUMERIC.
例4-89:
・INDEX_COL()
INDEX_COL()函数语法以下:
INDEX_COL(<table_name>,<index_id>,<key_id>)
INDEX_COL()函数前往表内索引辨认码为index_id的索引的称号,并找出构成该索引的列组合中第key_id个列名.其前往值范例为NCHAR.
例4-90:
・ISDATE()
ISDATE()函数语法以下:
ISDATE(<expression>)
ISDATE()函数判别所给定的表达式是不是为公道日期,假如是则前往1,不是则前往0.
例4-91:
・ISNULL()
ISNULL()函数语法以下:
ISNULL(<check_expression>,<replacement_value>)
ISNULL()函数将表达式中的NULL值用指定值交换.假如check_expresssion不是NULL,则前往其本来的值,不然,前往replacement_value的值.
提示:reaplacement_value的数据范例应与chech_expresssion分歧.
例4-92:
・ISNUMERIC()
ISNUMERIC()函数语法以下:
ISNUMERIC(<expression>)
ISNUMERIC()函数判别所给定的表达式是不是为公道的数值(INTEGER、FLOATINGPOINTNUMBER、MONEY或DECIMAL范例),假如是则前往1,不是则前往0.
提示:反省MONEY型数据时,应先用CONVERT()函数将其转换为数值型或字符型。
例4-93:
・NEWID
NEWID()函数语法以下:
NEWID()
NEWID()函数前往一个UNIQUEIDENTIFIER范例的数值.此函数利用盘算机的网卡的Ethernet地点加上经过CPUClock发生的数字而失掉其前往值.因为网卡的Ethernet地点是环球唯一的(在将来近一百年内不会临盆出不异Ethernet地点的网卡),因此函数所发生的数字也是唯一的.
例4-94:
・NULLIF()
NULLIF()函数语法以下:
NULLIF(<expression1>,<expression2>)
NULLIF()函数在expression1与expression2相称时前往NULL值,若不相称时则前往expression1的值.其前往值范例与expression1不异.expression1与expression2应为同类的数据范例.
例4-95:
・OBJECT_ID()
OBJECT_ID()函数语法以下:
OBJECT_ID(<object_name>)
OBJECT_ID()函数前往数据库工具的编号.其前往值范例为INT.
例4-96:
提示:当指定一个一时表的表名时,其表名的后面必需加上一时数据库名"tempdb",如:selectobject_id("tempdb..#mytemptable").
・OBJECT_NAME()
OBJECT_NAME()函数语法以下:
OBJECT_NAME(<object_id>)
OBJECT_NAME()函数前往数据库工具的称号.其前往值范例为NCHAR.
例4-97:
・PARSENAME()
PARSENAME()函数语法以下:
PARSENAME(<object_name>,<object_piece>)
PARSENAME()函数前往一个数据库工具完全称号中的特定部分(工具称号或数据库具有者称号或数据库称号或服务器称号).其前往值范例为NCHAR.
个中object_piece为INT范例,其取值以下:
工具称号Objectname;
数据库具有者称号Ownername;
数据库称号Databasename;
服务器称号Servername.
假如object_name或object_piece为NULL,则前往NULL值.
例4-98:
・PERMISSIONS()
PERMISSIONS()函数语法以下:
PERMISSIONS([object_id[,column_name]])
PERMISSIONS()函数用于猎取以后用户对某一工具的存取权限或对某一命令的实行权限.其前往值为一个32位的bitmap值,个中低16位暗示今朝用户工具的存取权限设定值.高16位暗示用户是不是能够开放此工具的权限给别的人.
假如不指定object_id,则函数前往今朝用户的命令实行权限的bitmap值.利用column_name选项能够失掉表的列权限.各权限值见表4-10至4-12.
有关PERMISSIONS()函数利用办法,我们将在今后的章节分离报告.
・STATS_DATE()
STATS_DATE()函数语法以下:
STATS_DATE(<table_id>,<index_id>)
STATS_DATE()函数前往最新的索引统计日期.其前往值范例为DATETIME.
例4-99:
・SUSER_SID()
SUSER_SID()函数语法以下:
SUSER_SID([login_name])
SUSER_SID()函数依据用户登录名前往用户的SID(SecurityIdentificationNumber,平安帐户名)号.其前往值范例为INT.假如不指定login_name,则前往以后用户的SID号.
例4-100:
・SUSER_SNAME()
SUSER_SNAME()函数语法以下:
SUSER_SNAME([server_user_sid])
SUSER_SNAME()函数依据SID号前往用户的登录名.假如没有指定server_user_sid,则前往以后用户的登录名.其前往值范例为NCHAR.
例4-101:
・USER_ID()
USER_ID()函数语法以下:
USER_ID([user_name])
USER_ID()函数依据用户数据库的用户名前往用户的数据库ID号.其前往值范例为INT.假如没有指定user_name,则前往以后用户的数据库ID号.
例4-102:
・USER_NAME()
USER_NAME()函数语法以下:
USER_NAME([user_id])
USER_NAME()函数依据用户的数据库ID号前往用户的数据库用户名.其前往值范例为NCHAR.假如没有指定user_id,则前往以后数据库的用户名.
例4-103:
9、TEXT和IMAGE函数
・TEXTPTR()
TEXTPTR()函数语法以下:
TEXTPTR(<column>)
TEXTPTR()函数前往一个指向存储文本的第一个数据库页的指针.其前往值是一个VARBINARY(16)范例的二进制字符串.假如数据范例为TEXT、NTEXT或IMAGE的列没有付与初值,则TEXTPTR()函数前往一个NULL指针.
例4-104:
・TEXTVALID()
TEXTVALID()函数语法以下:
TEXTVALID(<table.column>,<text_pointer>)
TEXTVALID()函数用于反省指定的文本指针是不是无效.假如无效,则前往1;有效,则前往0.假如列未付与初值,则前往NULL值.
例4-105:
10、NILADIC函数
NILADIC函数前往一个用户或工夫戳值.这类函数均不带参数.NILADIC函数常常被界说为CREATE或ALERTTABLE语句中DEFAULT束缚的一部分,可拜见"办理数据库表"章节.次要的NILADIC函数以下:
・CURRENT_TIMESTAMP
CURRENT_TIMESTAMP函数语法以下:
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP函数前往以后的日期和工夫,同等于GETDATE()函数.前往值范例为DATETIME.
例4-106:
・CURRENT_USER
CURRENT_USER函数语法以下:
CURRENT_USER
CURRENT_USER函数与USER_NAME()函数功效不异,前往以后用户的数据库用户名.前往值范例为SYSNAME.
例4-107:
・SESSION_USER
SESSION_USER函数语法以下:
SESSION_USER
SESSION_USER函数同等于USER_NAME()函数,前往以后用户的数据库用户名.前往值范例为NCHAR.
・SYSTEM_USER
SYSTEM_USER函数语法以下:
SYSTEM_USER
SYSTEM_USER前往以后体系的用户名.假如用户是以WindowsNT认证体例登录SQLServer的,则会前往WindowsNT的登录名;假如用户是以SQLServer认证体例登录的,则前往SQLServer中的用户名.
例4-108:
・USER
USER函数语法以下:
USER
USER与体系函数USER_NAME()的功效不异,前往以后用户的数据库用户名.前往值范例为CHAR.
例4-109:
11、用户自界说函数
从SQLServer2000入手下手,用户能够自界说函数了.在SQLServer2000顶用户自界说函数是作为一个数据库工具来办理的,可使用企业办理器(EnterpriseManager)或Transact-SQL命令来创立、修正、删除.其详细办法请拜见第13章"游标、视图和自界说函数".
本章先容了Transact-SQL言语的基础观点,及其利用办法.Transact-SQL言语必要大批的理论,才干纯熟使用.本章及今后的SQL语法基础上都是尺度的ANSISQL兼容语法,在别的数据库中,如ORACLE、SYBASE、INFORMIX、FOXPRO等,年夜部分语句都可套用.
为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 |