8、系l函?/SPAN> pȝ函数用于获取有关计算机系l、用戗数据库和数据库对象的信息。系l函数可以让用户在得C息后Q用条件语句,Ҏ(gu)q回的信息进行不同的操作。与其它函数一P可以在SELECT 语句的SELECT 和WHERE 子句以及表达式中使用pȝ函数?
·APP_NAMEQ) APP_NAMEQ) 函数语法如下Q?BR> APP_NAMEQ) APP_NAMEQ) 函数q回当前执行的应用程序的名称。其q回值类型ؓnvarchar Q?28Q?BR> ?-77Q?/STRONG> 试当前应用E序是否为SQL Server Query Analyzer
·COALESCEQ) COALESCEQ) 函数语法如下Q?BR>COALESCE Q?lt;expression> [Q?...n]Q?BR>COALESCEQ) 函数q回众多表达式中W一个非NULL 表达式的倹{如果所有的表达式均为NULLQ?则COALESCEQ) 函数q回NULL 倹{COALESCEQ) 函数{效于下面的CASE 语句Q?
CASE WHEN Qexpression1 IS NOT NULLQ?THEN expression1 ?BR>WHEN QexpressionN IS NOT NULLQ?THEN expression ELSE NULL
?-78Q?

·COL_LENGTHQ) COL_LENGTHQ) 函数语法如下Q?BR> COL_LENGTH Q?lt;'table_name'>Q?<'column_name'>Q?BR>COL_LENGTHQ) 函数q回表中指定字段的长度倹{其q回gؓINT cd?BR> ?-79Q?/STRONG>

·COL_NAMEQ) COL_NAMEQ) 函数语法如下Q?BR> COL_NAME Q?lt;table_id>Q?<column_id>Q?BR>COL_NAMEQ) 函数q回表中指定字段的名Uͼ卛_名。其q回gؓSYSNAME cd。其中table_id 和column_id 都是INT cd的数据,函数用table_id 和column_id 参数来生成列名字W串。关于如何获得table_id 和column_idQ?请参见OBJECT_IDQ) 函数?BR> ?-80Q?/STRONG>


·DATALENGTHQ) DATALENGTHQ) 函数语法如下Q?BR>DATALENGTH Q?lt;expression>Q?BR>DATALENGTHQ) 函数q回数据表达式的数据的实际长度。其q回值类型ؓINT。DATALENGTHQ) 函数对VARCHAR?VARBINARY?TEXT?IMAGE?NVARCHAR和NTEX {能存储变动长度数据的数据类型特别实用。NULL 的长度ؓNULL?BR> ?-81Q?/STRONG>

· DB_IDQ) DB_IDQ) 函数语法如下Q?BR>DB_ID Q['database_name']Q?BR>DB_IDQ) 函数q回数据库的~号。其q回gؓSMALLINT cd。如果没有指定database_nameQ?则返回当前数据库的编受?BR> ?-82Q?/STRONG>


·DB_NAMEQ) DB_NAME() 函数语法如下Q?BR>DB_NAME (database_id) DB_NAME() 函数q回数据库的名称.其返回值类型ؓNVARCHAR (128). database_id是SMALLINT cd的数?如果没有指定database_id, 则返回当前数据库的名U?
?-83:

· FORMATMESSAGE() FORMATMESSAGE() 函数语法如下: FORMATMESSAGE (<message_number>, <param_value>[, ...n]) FORMATMESSAGE() 函数用于从系l信息表sysmessages 中挑选一条现存的信息, 再将其格式{换ؓ用户需要的形式.其功能类gRAISERROR 命o,不同的是RAISERROR命o立即打印Z?而FORMATMESSAGE() 函数q回~辑q的信息l调用它的程?其返回值类型ؓNVARCHAR. 其中message_number 是存储在sysmessages pȝ表中的信息ID ?param_value 是在信息中用的参数.最多可使用20 个参? FORMATMESSAGE() 函数查找使用当前语言q_语言的信?如果没有本地语言的信?则用U.S. English 版本语言的信?
?-84: 假定有一个编号ؓ10001 的信息存储在sysmessages 表中,此信息的内容?The Length of rows %column_name in %table_name is %column_num.".FORMATMESSAGE() 函数用值myColumn?myTable ?0 分别替代上述参数?结果存储在变量@test1 ?E序如下: declare @test1 varchar (100) select @test1 = formatmessage (10001, 'myColumn', 'myTable', 20)
·GETANSINULL() GETANSINULL() 函数语法如下: GETANSINULL() (['database_name']) GETANSINULL() 函数q回当前数据库默认的NULL ?其返回值类型ؓINT.GETANSINULL() 函数对ANSI I值NULL q回1; 如果没有定义ANSI I?则返?.
?-85: select getansinull ('pangu') q行l果如下: ------ 1
·HOST_ID() HOST_ID() 函数语法如下: HOST_ID() HOST_ID() 函数q回服务器端计算机的名称.其返回值类型ؓNCHAR.
?-86: declare @hostID char (8) select @hostID = host_id() print @hostID q行l果如下: -606771
·HOST_NAME() HOST_NAME() 函数语法如下: HOST_NAME() HOST_NAME() 函数q回服务器端计算机的名称.其返回值类型ؓCHAR (8).
?-87: declare @hostNAME nchar (20) select @hostNAME = host_name() print @hostNAME
q行l果如下: XUJIN
·IDENTITY() IDENTITY() 函数语法如下: IDENTITY (<data_type>[, seed, increment]) [AS column_name]) IDENTITY() 函数只在SELECT...INTO 语句中?用于插入一个identity column列到新表?其返回值类型与data_type 的类型相?
其中: data_type 指定数据cd.data type 是INTEGER 或DECIMAL cȝ数据cd.Seed指定identity column 的初?即第一个?Increment 指定增加一个记录时,记录的identity column 值应在前记录的基上增加的?seed 和increment 的缺省gؓ1.column_name 是所插入的identity column 的列?虽然AS column_name 为可选项,但由于函数在表中插入了一个新?所以必L定列?如果不用AS column_name 选项,可以使用以下两种方式来指定列? (1) select identity (int, 1, 1) as column_name into newtable from oldtable (2) select column_name = identity (int, 1, 1) into newtable from oldtable 有关identity column 的信?请参?理数据库表"中的"列属?章节.
·IDENT_INCR() IDENT_INCR() 函数语法如下: IDENT_INCR ('table_or_view') IDENT_INCR() 函数q回表中标识性字Didentity column 的增?若无此字D?则返回NULL ?其返回值类型ؓNUMERIC.
?-88:

·IDENT_SEED() IDENT_SEED() 函数语法如下: IDENT_SEED (<'table_or_view'>) IDENT_SEED() 函数q回表中标识性字Didentity column 的初?若无此字D?则返回NULL ?其返回值类型ؓNUMERIC.
?-89:

·INDEX_COL() INDEX_COL() 函数语法如下: INDEX_COL (<'table_name'>, <index_id>, <key_id>) INDEX_COL() 函数q回表内索引识别码ؓindex_id 的烦引的名称,q找出组成该索引的列l合中第key_id 个列?其返回值类型ؓNCHAR.
?-90:


·ISDATE() ISDATE() 函数语法如下: ISDATE (<expression>) ISDATE() 函数判断所l定的表辑ּ是否为合理日?如果是则q回1, 不是则返?.
?-91Q?/STRONG>


·ISNULL() ISNULL() 函数语法如下: ISNULL (<check_expression>, <replacement_value>) ISNULL() 函数表辑ּ中的NULL 值用指定值替?如果check_expresssion 不是NULL, 则返回其原来的?否则,q回replacement_value 的?
提醒Q?/STRONG>reaplacement_value的数据类型应与chech_expresssion一?
?-92:

·ISNUMERIC() ISNUMERIC() 函数语法如下: ISNUMERIC (<expression>) ISNUMERIC() 函数判断所l定的表辑ּ是否为合理的数?INTEGER?FLOATING POINT NUMBER?MONEY 或DECIMAL cd),如果是则q回1, 不是则返?.
提醒Q?/STRONG>查MONEY型数据时Q应先用CONVERT()函数其转换为数值型或字W型?BR> ?-93Q?/STRONG>


·NEWID NEWID() 函数语法如下: NEWID() NEWID() 函数q回一个UNIQUEIDENTIFIER cd的数?此函C用计机的网卡的Ethernet 地址加上l由CPU Clock 产生的数字而得到其q回?׃|卡的Ethernet地址是全球惟一?在未来近一癑ֹ内不会生产出相同Ethernet 地址的网?,因而函数所产生的数字也是惟一?
?-94:

·NULLIF() NULLIF() 函数语法如下: NULLIF (<expression1>, <expression2>) NULLIF() 函数在expression1 与expression2 相等时返回NULL ?若不相等时则q回expression1 的?其返回值类型与expression1 相同.expression1 与expression2 应ؓ同类的数据类?
?-95:

·OBJECT_ID() OBJECT_ID() 函数语法如下: OBJECT_ID (<'object_name'>) OBJECT_ID() 函数q回数据库对象的~号.其返回值类型ؓINT.
?-96:

提醒Q?/STRONG>当指定一个时表的表名时,其表名的前面必须加上临时数据库名"tempdb"Q如Qselect object_id("tempdb..#mytemptable").
·OBJECT_NAME() OBJECT_NAME() 函数语法如下: OBJECT_NAME (<object_id>) OBJECT_NAME() 函数q回数据库对象的名称.其返回值类型ؓNCHAR.
?-97:

·PARSENAME() PARSENAME() 函数语法如下: PARSENAME (<'object_name '>, <object_piece>) PARSENAME() 函数q回一个数据库对象完整名称中的特定部分(对象名称或数据库拥有者名U或数据库名U或服务器名U?.其返回值类型ؓNCHAR. 其中object_piece 为INT cd,其取值如? 对象名称Object name; 数据库拥有者名UOwner name; 数据库名UDatabase name; 服务器名UServer name. 如果object_name 或object_piece 为NULL, 则返回NULL ?
?-98:

·PERMISSIONS() PERMISSIONS() 函数语法如下: PERMISSIONS ([object_id [, 'column_name']]) PERMISSIONS() 函数用于获取当前用户Ҏ(gu)一对象的存取权限或Ҏ(gu)一命o的执行权?其返回gؓ一?2 位的bitmap ?其中?6 位表C目前用户对象的存取权限讑֮??6 位表C用h否可以开放此对象的权限给其它? 如果不指定object_id, 则函数返回目前用L命o执行权限的bitmap ?使用column_name 选项可以得到表的列权?各权限D?-10 ?-12.
  有关PERMISSIONS() 函数使用Ҏ(gu),我们在以后的章节分别讲q?
·STATS_DATE() STATS_DATE() 函数语法如下: STATS_DATE (<table_id>, <index_id>) STATS_DATE() 函数q回最新的索引l计日期.其返回值类型ؓDATETIME.
?-99:

·SUSER_SID() SUSER_ SID() 函数语法如下: SUSER_SID (['login_name']) SUSER_SID() 函数Ҏ(gu)用户d名返回用LSID (Security Identification Number,安全帐户??其返回值类型ؓINT. 如果不指定login_name, 则返回当前用LSID?
?-100:

·SUSER_SNAME() SUSER_SNAME() 函数语法如下: SUSER_SNAME ([server_user_sid]) SUSER_SNAME() 函数Ҏ(gu)SID 可回用Ld?如果没有指定server_user_sid,则返回当前用Ld?其返回值类型ؓNCHAR.
?-101:

·USER_ID() USER_ID() 函数语法如下: USER_ID (['user_name']) USER_ID() 函数Ҏ(gu)用户数据库的用户名返回用L数据库ID ?其返回值类型ؓINT. 如果没有指定user_name, 则返回当前用L数据库ID ?
?-102:

·USER_NAME() USER_NAME() 函数语法如下: USER_NAME ([user_id]) USER_NAME() 函数Ҏ(gu)用户的数据库ID 可回用L数据库用户名.其返回值类型ؓNCHAR. 如果没有指定user_id, 则返回当前数据库的用户名.
?-103:

9、TEXT 和IMAGE 函数 ·TEXTPTR() TEXTPTR() 函数语法如下: TEXTPTR (<column>) TEXTPTR() 函数q回一个指向存储文本的W一个数据库늚指针.其返回值是一个VARBINARY (16) cd的二q制字符?如果数据cd为TEXT?NTEXT 或IMAGE的列没有赋予初?则TEXTPTR() 函数q回一个NULL 指针.
?-104:

·TEXTVALID() TEXTVALID() 函数语法如下: TEXTVALID (<'table.column'>, <text_ pointer>) TEXTVALID() 函数用于查指定的文本指针是否有效.如果有效,则返?; 无效,则返?. 如果列未赋予初?则返回NULL ?
?-105:


10、NILADIC 函数 NILADIC 函数q回一个用h旉戛_?q类函数均不带参?NILADIC 函数l常被定义ؓCREATE 或ALERT TABLE 语句中DEFAULT U束的一部分,可参?理数据库表"章节.主要的NILADIC 函数如下:
·CURRENT_TIMESTAMP CURRENT_TIMESTAMP 函数语法如下: CURRENT_TIMESTAMP CURRENT_TIMESTAMP 函数q回当前的日期和旉,{同于GETDATE() 函数.q回值类型ؓDATETIME.
?-106:

·CURRENT_USER CURRENT_USER 函数语法如下: CURRENT_USER CURRENT_USER 函数与USER_NAME() 函数功能相同,q回当前用户的数据库用户?q回值类型ؓSYSNAME.
?-107:
 
·SESSION_USER SESSION_USER 函数语法如下: SESSION_USER SESSION_USER 函数{同于USER_NAME() 函数,q回当前用户的数据库用户?q回值类型ؓNCHAR.
·SYSTEM_USER SYSTEM_USER 函数语法如下: SYSTEM_USER SYSTEM_USER q回当前pȝ的用户名.如果用户是以Windows NT 认证方式dSQL Server ?则会q回Windows NT 的登录名;如果用户是以SQL Server 认证方式d?则返回SQL Server 中的用户?
?-108:

·USER USER 函数语法如下: USER USER 与系l函数USER_NAME() 的功能相?q回当前用户的数据库用户?q回值类型ؓCHAR.
?-109:

11、用戯定义函数 从SQL Server 2000 开?用户可以自定义函C.在SQL Server 2000 中用戯定义函数是作Z个数据库对象来管理的,可以使用企业理?Enterprise Manager) 或Transact-SQL 命o来创建、修攏V删?其具体方法请参见W?3 ?游标、视囑֒自定义函?.
本章介绍了Transact-SQL 语言的基本概?及其使用Ҏ(gu).Transact-SQL 语言需要大量的实践,才能熟练q用.本章及以后的SQL 语法基本上都是标准的ANSI SQL 兼容语法,在其它数据库?如ORACLE?SYBASE?INFORMIX?FOXPRO {?大部分语句均可套?
|