zoukankan      html  css  js  c++  java
  • SQL內置Function系统函数

    系统函数

    这些标量函数对 Microsoft® SQL Server™ 中的值、对象和设置进行操作并返回有关信息。

    下表列出系统函数及其确定性属性。有关函数确定性的更多信息,请参见确定性函数和非确定性函数。

    函数

    确定性

    APP_NAME

    不具有确定性

    CASE 表达式

    具有确定性

    CAST 和 CONVERT

    除非与 datetime、smalldatetime 或 sql_variant 一起使用,其它时候都具有确定性。

    COALESCE

    具有确定性

    COLLATIONPROPERTY

    不具有确定性

    CURRENT_TIMESTAMP

    不具有确定性

    CURRENT_USER

    不具有确定性

    DATALENGTH

    具有确定性

    @@ERROR

    不具有确定性

    fn_helpcollations

    具有确定性

    fn_servershareddrives

    不具有确定性

    fn_virtualfilestats

    不具有确定性

    FORMATMESSAGE

    不具有确定性

    GETANSINULL

    不具有确定性

    HOST_ID

    不具有确定性

    HOST_NAME

    不具有确定性

    IDENT_CURRENT

    不具有确定性

    IDENT_INCR

    不具有确定性

    IDENT_SEED

    不具有确定性

    @@IDENTITY

    不具有确定性

    IDENTITY(函数)

    不具有确定性

    ISDATE

    只有与 CONVERT 函数一起使用,指定 CONVERT 样式参数且样式参数不等于 0、100、9 或 109 时才具有确定性。样式 0 和 100 使用默认格式 mon dd yyyy hh:miAM(或 PM)。样式 9 和 109 使用默认格式加毫秒 mon dd yyyy hh:mi:ss:mmmAM(或 PM)。

    ISNULL

    具有确定性

    ISNUMERIC

    具有确定性

    NEWID

    不具有确定性

    NULLIF

    具有确定性

    PARSENAME

    具有确定性

    PERMISSIONS

    不具有确定性

    @@ROWCOUNT

    不具有确定性

    ROWCOUNT_BIG

    不具有确定性

    SCOPE_IDENTITY

    不具有确定性

    SERVERPROPERTY

    不具有确定性

    SESSIONPROPERTY

    不具有确定性

    SESSION_USER

    不具有确定性

    STATS_DATE

    不具有确定性

    SYSTEM_USER

    不具有确定性

    @@TRANCOUNT

    不具有确定性

    USER_NAME

    不具有确定性

     

    1APP_NAME

    返回当前会话的应用程序名称(如果应用程序进行了设置)。

    语法

    APP_NAME ( )

    返回类型

    nvarchar(128)

    示例

    下例检查启动此进程的客户端应用程序是否为 SQL 查询分析器会话。

    DECLARE @CurrentApp varchar(35)
    SET @CurrentApp = APP_NAME()
    IF @CurrentApp <> 'MS SQL Query Analyzer'
    PRINT 'This process was not started by a SQL Query Analyzer query session.'

    2CASE

    计算条件列表并返回多个可能结果表达式之一。

    CASE 具有两种格式:

    • 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。
    • CASE 搜索函数计算一组布尔表达式以确定结果。

    两种格式都支持可选的 ELSE 参数。

    语法

    简单 CASE 函数:

    CASE input_expression
        WHEN when_expression THEN result_expression
            [ ...n ]
        [
            ELSE else_result_expression
        END

    CASE 搜索函数:

    CASE
        WHEN Boolean_expression THEN result_expression
            [ ...n ]
        [
            ELSE else_result_expression
        END

    参数

    input_expression

    是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的 Microsoft® SQL Server™ 表达式。

    WHEN when_expression

    使用简单 CASE 格式时 input_expression 所比较的简单表达式。When_expression 是任意有效的 SQL Server 表达式。Input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。

    n

    占位符,表明可以使用多个 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。

    THEN result_expression

    当 input_expression = when_expression 取值为 TRUE,或者 Boolean_expression 取值为 TRUE 时返回的表达式。result expression 是任意有效的 SQL Server 表达式。

    ELSE else_result_expression

    当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。Else_result_expression 是任意有效的 SQL Server 表达式。Else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。

    WHEN Boolean_expression

    使用 CASE 搜索格式时所计算的布尔表达式。Boolean_expression 是任意有效的布尔表达式。

    结果类型

    从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型。有关更多信息,请参见数据类型的优先顺序。

    结果值
    简单 CASE 函数:
    • 计算 input_expression,然后按指定顺序对每个 WHEN 子句的 input_expression = when_expression 进行计算。
    • 返回第一个取值为 TRUE 的 (input_expression = when_expression) 的 result_expression。
    • 如果没有取值为 TRUE 的 input_expression = when_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。
    CASE 搜索函数:
    • 按指定顺序为每个 WHEN 子句的 Boolean_expression 求值。
    • 返回第一个取值为 TRUE 的 Boolean_expression 的 result_expression。
    • 如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE 子句时 SQL Server 将返回 else_result_expression;若没有指定 ELSE 子句,则返回 NULL 值。
    示例
    A. 使用带有简单 CASE 函数的 SELECT 语句

    在 SELECT 语句中,简单 CASE 函数仅检查是否相等,而不进行其它比较。下面的示例使用 CASE 函数更改图书分类显示,以使其更易于理解。

    USE pubs
    GO
    SELECT   Category = 
          CASE type
             WHEN 'popular_comp' THEN 'Popular Computing'
             WHEN 'mod_cook' THEN 'Modern Cooking'
             WHEN 'business' THEN 'Business'
             WHEN 'psychology' THEN 'Psychology'
             WHEN 'trad_cook' THEN 'Traditional Cooking'
             ELSE 'Not yet categorized'
          END,
       CAST(title AS varchar(25)) AS 'Shortened Title',
       price AS Price
    FROM titles
    WHERE price IS NOT NULL
    ORDER BY type, price
    COMPUTE AVG(price) BY type
    GO

    下面是结果集:

    Category            Shortened Title           Price                      
    ------------------- ------------------------- -------------------------- 
    Business            You Can Combat Computer S 2.99                       
    Business            Cooking with Computers: S 11.95                      
    Business            The Busy Executive's Data 19.99                      
    Business            Straight Talk About Compu 19.99                      
     
                                                  avg
                                                  ==========================
                                                  13.73                      
     
    Category            Shortened Title           Price                      
    ------------------- ------------------------- -------------------------- 
    Modern Cooking      The Gourmet Microwave     2.99                       
    Modern Cooking      Silicon Valley Gastronomi 19.99                      
     
                                                  avg
                                                  ==========================
                                                  11.49                      
     
    Category            Shortened Title           Price                      
    ------------------- ------------------------- -------------------------- 
    Popular Computing   Secrets of Silicon Valley 20.00                      
    Popular Computing   But Is It User Friendly? 22.95                      
     
                                                  avg
                                                  ==========================
                                                  21.48                      
     
    Category            Shortened Title           Price                      
    ------------------- ------------------------- -------------------------- 
    Psychology          Life Without Fear         7.00                       
    Psychology          Emotional Security: A New 7.99                       
    Psychology          Is Anger the Enemy?       10.95                      
    Psychology          Prolonged Data Deprivatio 19.99                      
    Psychology          Computer Phobic AND Non-P 21.59                      
     
                                                  avg
                                                  ==========================
                                                  13.50                      
     
    Category            Shortened Title           Price                      
    ------------------- ------------------------- -------------------------- 
    Traditional Cooking Fifty Years in Buckingham 11.95                      
    Traditional Cooking Sushi, Anyone?            14.99                      
    Traditional Cooking Onions, Leeks, and Garlic 20.95                      
     
                                                  avg
                                                  ==========================
                                                  15.96                      
     
    (21 row(s) affected)
    B. 使用带有简单 CASE 函数和 CASE 搜索函数的 SELECT 语句

    在 SELECT 语句中,CASE 搜索函数允许根据比较值在结果集内对值进行替换。下面的示例根据图书的价格范围将价格(money 列)显示为文本注释。

    USE pubs
    GO
    SELECT    'Price Category' = 
          CASE 
             WHEN price IS NULL THEN 'Not yet priced'
             WHEN price < 10 THEN 'Very Reasonable Title'
             WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
             ELSE 'Expensive book!'
          END,
       CAST(title AS varchar(20)) AS 'Shortened Title'
    FROM titles
    ORDER BY price
    GO

    下面是结果集:

    Price Category        Shortened Title      
    --------------------- -------------------- 
    Not yet priced        Net Etiquette        
    Not yet priced        The Psychology of Co 
    Very Reasonable Title The Gourmet Microwav 
    Very Reasonable Title You Can Combat Compu 
    Very Reasonable Title Life Without Fear    
    Very Reasonable Title Emotional Security: 
    Coffee Table Title    Is Anger the Enemy? 
    Coffee Table Title    Cooking with Compute 
    Coffee Table Title    Fifty Years in Bucki 
    Coffee Table Title   Sushi, Anyone?       
    Coffee Table Title    Prolonged Data Depri 
    Coffee Table Title    Silicon Valley Gastr 
    Coffee Table Title    Straight Talk About 
    Coffee Table Title    The Busy Executive's 
    Expensive book!       Secrets of Silicon V 
    Expensive book!       Onions, Leeks, and G 
    Expensive book!       Computer Phobic And 
    Expensive book!       But Is It User Frien 
     
    (18 row(s) affected)
    C. 使用带有 SUBSTRING 和 SELECT 的 CASE 函数

    下面的示例使用 CASE 和 THEN 生成一个有关作者、图书标识号和每个作者所著图书类型的列表。

    USE pubs
    SELECT SUBSTRING((RTRIM(a.au_fname) + ' '+ 
       RTRIM(a.au_lname) + ' '), 1, 25) AS Name, a.au_id, ta.title_id,
       Type = 
      CASE 
        WHEN SUBSTRING(ta.title_id, 1, 2) = 'BU' THEN 'Business'
        WHEN SUBSTRING(ta.title_id, 1, 2) = 'MC' THEN 'Modern Cooking'
        WHEN SUBSTRING(ta.title_id, 1, 2) = 'PC' THEN 'Popular Computing'
        WHEN SUBSTRING(ta.title_id, 1, 2) = 'PS' THEN 'Psychology'
        WHEN SUBSTRING(ta.title_id, 1, 2) = 'TC' THEN 'Traditional Cooking'
     END
    FROM titleauthor ta JOIN authors a ON ta.au_id = a.au_id

    下面是结果集:

    Name                      au_id       title_id Type                
    ------------------------- ----------- -------- ------------------- 
    Johnson White             172-32-1176 PS3333   Psychology          
    Marjorie Green            213-46-8915 BU1032   Business            
    Marjorie Green            213-46-8915 BU2075   Business            
    Cheryl Carson             238-95-7766 PC1035   Popular Computing   
    Michael O'Leary           267-41-2394 BU1111   Business            
    Michael O'Leary           267-41-2394 TC7777   Traditional Cooking 
    Dean Straight             274-80-9391 BU7832   Business            
    Abraham Bennet            409-56-7008 BU1032   Business            
    Ann Dull                  427-17-2319 PC8888   Popular Computing   
    Burt Gringlesby           472-27-2349 TC7777   Traditional Cooking 
    Charlene Locksley         486-29-1786 PC9999   Popular Computing   
    Charlene Locksley         486-29-1786 PS7777   Psychology          
    Reginald Blotchet-Halls   648-92-1872 TC4203   Traditional Cooking 
    Akiko Yokomoto            672-71-3249 TC7777   Traditional Cooking 
    Innes del Castillo        712-45-1867 MC2222   Modern Cooking      
    Michel DeFrance           722-51-5454 MC3021   Modern Cooking      
    Stearns MacFeather        724-80-9391 BU1111   Business            
    Stearns MacFeather        724-80-9391 PS1372   Psychology          
    Livia Karsen              756-30-7391 PS1372   Psychology          
    Sylvia Panteley           807-91-6654 TC3218   Traditional Cooking 
    Sheryl Hunter             846-92-7186 PC8888   Popular Computing   
    Anne Ringer               899-46-2035 MC3021   Modern Cooking      
    Anne Ringer               899-46-2035 PS2091   Psychology          
    Albert Ringer             998-72-3567 PS2091   Psychology          
    Albert Ringer             998-72-3567 PS2106   Psychology          
     
    (25 row(s) affected)

    3CAST 和 CONVERT

    将某种数据类型的表达式显式转换为另一种数据类型。CAST 和 CONVERT 提供相似的功能。

    语法

    使用 CAST:

    CAST ( expression AS data_type )

    使用 CONVERT:

    CONVERT (data_type[(length)], expression [, style])

    参数

    expression

    是任何有效的 Microsoft® SQL Server™ 表达式。有关更多信息,请参见表达式。

    data_type

    目标系统所提供的数据类型,包括 bigint 和 sql_variant。不能使用用户定义的数据类型。有关可用的数据类型的更多信息,请参见数据类型。

    length

    nchar、nvarchar、char、varchar、binary 或 varbinary 数据类型的可选参数。

    style

    日期格式样式,借以将 datetime 或 smalldatetime 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型);或者字符串格式样式,借以将 float、real、money 或 smallmoney 数据转换为字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。

    SQL Server 支持使用科威特算法的阿拉伯样式中的数据格式。

    在表中,左侧的两列表示将 datetime 或 smalldatetime 转换为字符数据的 style 值。给 style 值加 100,可获得包括世纪数位的四位年份 (yyyy)。

    不带世纪数位 (yy)

    带世纪数位 (yyyy)


    标准


    输入/输出**

    -

    0 或 100 (*)

    默认值

    mon dd yyyy hh:miAM(或 PM)

    1

    101

    美国

    mm/dd/yyyy

    2

    102

    ANSI

    yy.mm.dd

    3

    103

    英国/法国

    dd/mm/yy

    4

    104

    德国

    dd.mm.yy

    5

    105

    意大利

    dd-mm-yy

    6

    106

    -

    dd mon yy

    7

    107

    -

    mon dd, yy

    8

    108

    -

    hh:mm:ss

    -

    9 或 109 (*)

    默认值 + 毫秒

    mon dd yyyy hh:mi:ss:mmmAM(或 PM)

    10

    110

    美国

    mm-dd-yy

    11

    111

    日本

    yy/mm/dd

    12

    112

    ISO

    yymmdd

    -

    13 或 113 (*)

    欧洲默认值 + 毫秒

    dd mon yyyy hh:mm:ss:mmm(24h)

    14

    114

    -

    hh:mi:ss:mmm(24h)

    -

    20 或 120 (*)

    ODBC 规范

    yyyy-mm-dd hh:mm:ss[.fff]

    -

    21 或 121 (*)

    ODBC 规范(带毫秒)

    yyyy-mm-dd hh:mm:ss[.fff]

    -

    126(***)

    ISO8601

    yyyy-mm-dd Thh:mm:ss:mmm(不含空格)

    -

    130*

    科威特

    dd mon yyyy hh:mi:ss:mmmAM

    -

    131*

    科威特

    dd/mm/yy hh:mi:ss:mmmAM

     

    *    默认值(style 0 或 100、9 或 109、13 或 113、20 或 120、21 或 121)始终返回世纪数位 (yyyy)。
    ** 当转换为 datetime 时输入;当转换为字符数据时输出。
    *** 专门用于 XML。对于从 datetime 或 smalldatetime 到 character 数据的转换,输出格式如表中所示。对于从 float、money 或 smallmoney 到 character 数据的转换,输出等同于 style 2。对于从 real 到 character 数据的转换,输出等同于 style 1。

    重要  默认情况下,SQL Server 根据截止年份 2049 解释两位数字的年份。即,两位数字的年份 49 被解释为 2049,而两位数字的年份 50 被解释为 1950。许多客户端应用程序(例如那些基于 OLE 自动化对象的客户端应用程序)都使用 2030 作为截止年份。SQL Server 提供一个配置选项("两位数字的截止年份"),借以更改 SQL Server 所使用的截止年份并对日期进行一致性处理。然而最安全的办法是指定四位数字年份。

    当从 smalldatetime 转换为字符数据时,包含秒或毫秒的样式将在这些位置上显示零。当从 datetime 或 smalldatetime 值进行转换时,可以通过使用适当的 char 或 varchar 数据类型长度来截断不需要的日期部分。

    下表显示了从 float 或 real 转换为字符数据时的 style 值。

    输出

    0(默认值)

    最大为 6 位数。根据需要使用科学记数法。

    1

    始终为 8 位值。始终使用科学记数法。

    2

    始终为 16 位值。始终使用科学记数法。

     

    在下表中,左列表示从 money 或 smallmoney 转换为字符数据时的 style 值。

    输出

    0(默认值)

    小数点左侧每三位数字之间不以逗号分隔,小数点右侧取两位数,例如 4235.98。

    1

    小数点左侧每三位数字之间以逗号分隔,小数点右侧取两位数,例如 3,510.92。

    2

    小数点左侧每三位数字之间不以逗号分隔,小数点右侧取四位数,例如 4235.9819。

     

    返回类型

    返回与 data type 0 相同的值。

    注释

    隐性转换指那些没有指定 CAST 或 CONVERT 函数的转换。而显式转换指那些已指定了所需 CAST (CONVERT) 函数的转换。下面的图表显示了所有可用于 SQL Server 系统提供的数据类型的显式和隐性转换,这些数据类型包括 bigint 和 sql_variant。

    说明  因为 Unicode 数据始终使用偶数位字节,所以当在 binary 或 varbinary 数据类型与 Unicode 所支持的数据类型之间进行转换时会使用提示。例如,此转换不返回 41 的十六进制值,而是返回 4100 的十六进制值:SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary)

    不支持 text 和 image 数据类型的自动数据类型转换。可以将 text 数据显式转换为字符数据,将 image 数据显性转换为 binary 或 varbinary 数据,但是最大长度为 8000。如果尝试进行不正确的转换(例如,将包含字母的字符表达式转换为 int),则 SQL Server 会产生错误信息。

    当 CAST 或 CONVERT 的输出是字符串并且输入也是字符串时,输出与输入具有相同的排序规则和排序规则标签。如果输入不是字符串,则输出采用数据库的默认排序规则及强制默认的排序规则标签。有关更多信息,请参见排序规则的优先顺序。

    若要给输出指派不同的排序规则,请将 COLLATE 子句应用到 CAST 或 CONVERT 函数的结果表达式中。例如:

    SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS

    不存在有关赋值的从 sql_variant 数据类型进行的隐性转换,但是存在转换为 sql_variant 的隐性转换。

    将字符或二进制表达式(char、nchar、nvarchar、varchar、binary 或 varbinary)转换为不同数据类型的表达式时,数据可能会被截断,只显示一部分,或者因为结果太短无法显示而返回错误。除下表中所显示的转换外,转换为 char、varchar、nchar、nvarchar、binary 和 varbinary 时将被截断。

    被转换的数据类型

    转换为的数据类型

    结果

    int、smallint 或 tinyint

    char

    *

     

    varchar

    *

     

    nchar

    E

     

    nvarchar

    E

    money、smallmoney、numeric、decimal、float 或 real

    char

    E

     

    varchar

    E

     

    nchar

    E

     

    nvarchar

    E

     

    * 结果长度太短而无法显示。
    E 因为结果长度太短无法显示而返回错误。

    Microsoft SQL Server 仅保证往返转换(即,从原始数据类型进行转换后又返回原始数据类型)在各版本间产生相同值。下面的示例显示往返转换:

    DECLARE @myval decimal (5, 2)
    SET @myval = 193.57
    SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
    -- Or, using CONVERT
    SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))

    例如,不要尝试构造 binary 值并将它们转换为数字数据类型分类的数据类型。SQL Server 并不保证 decimal 或 numeric 数据类型转换为 binary 的结果在 SQL Server 各版本间相同。

    下面的示例显示了由于太短而无法显示的结果表达式。

    USE pubs
    SELECT SUBSTRING(title, 1, 25) AS Title, CAST(ytd_sales AS char(2))
    FROM titles
    WHERE type = 'trad_cook'

    下面是结果集:

    Title                        
    ------------------------- -- 
    Onions, Leeks, and Garlic * 
    Fifty Years in Buckingham * 
    Sushi, Anyone?            * 
     
    (3 row(s) affected)

    当具有不同小数位数的数据类型进行转换时,值将被截断为最精确的数位。例如,SELECT CAST(10.6496 AS int) 的结果为 10。

    转换时,若目标数据类型的小数位数小于源数据类型的小数位数,则要转换的值将被四舍五入。例如,CAST(10.3496847 AS money) 的结果是 $10.3497。

    当将非数字类型的 char、nchar、varchar 或 nvarchar 数据转换为 int、float、numeric 或 decimal 时,SQL Server 将返回错误信息。当将空字符串 (" ") 转换为 numeric 或 decimal 时,SQL Server 也将返回错误信息。

    使用二进制字符串数据

    当 binary 或 varbinary 数据转换为字符数据并且在 x 后面指定了奇数位的值时,SQL Server 在 x 后面添加 0(零)以成为偶数位值。

    二进制数据包含从 0 到 9 和从 A 到 F(或从 a 到 f)的字符,每两个字符为一组。二进制字符串必须以 0x 开头。例如,若要输入 FF,请键入 0xFF。最大值是一个 8000 字节的二进制值,每个字节的最大值都是 FF。Binary 数据类型不能用于十六进制数据,而是用于位模式。对于存储为二进制数据的十六进制数字的转换和计算结果,无法保证其准确性。

    当指定 binary 数据类型的长度时,每两个字符被算作是一个单位长度。长度 10 表示将输入 10 个双字符组。

    由 0x 表示的空二进制字符串可以储存为二进制数据。

    示例
    A. 同时使用 CAST 和 CONVERT

    每个示例都将检索书名(这些图书的截止当前销售额的第一位数字为 3),并将这些图书的 ytd_sales 转换为 char(20)。

    -- Use CAST.
    USE pubs
    GO
    SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
    FROM titles
    WHERE CAST(ytd_sales AS char(20)) LIKE '3%'
    GO
     
    -- Use CONVERT.
    USE pubs
    GO
    SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales
    FROM titles
    WHERE CONVERT(char(20), ytd_sales) LIKE '3%'
    GO

    下面是任一查询的结果集:

    Title                          ytd_sales   
    ------------------------------ ----------- 
    Cooking with Computers: Surrep 3876        
    Computer Phobic AND Non-Phobic 375         
    Emotional Security: A New Algo 3336        
    Onions, Leeks, and Garlic: Coo 375         
     
    (4 row(s) affected)
    B. 使用带有算术运算符的 CAST

    下面的示例通过将总的截止当前销售额 (ytd_sales) 与每本图书的价格 (price) 相除,进行单独列计算 (Copies)。在四舍五入到最接近的整数后,此结果将转换为 int 数据类型。

    USE pubs
    GO
    SELECT CAST(ROUND(ytd_sales/price, 0) AS int) AS 'Copies'
    FROM titles
    GO

    下面是结果集:

    Copies      
    ------ 
    205         
    324         
    6262        
    205         
    102         
    7440        
    NULL        
    383         
    205         
    NULL        
    17          
    187         
    16          
    204         
    418         
    18          
    1263        
    273         
     
    (18 row(s) affected)
    C. 使用 CAST 进行串联

    下面的示例使用 CAST 数据类型转换函数来串联非字符、非二进制表达式。

    USE pubs
    GO
    SELECT 'The price is ' + CAST(price AS varchar(12))
    FROM titles
    WHERE price > 10.00
    GO

    下面是结果集:

    ------------------ 
    The price is 19.99        
    The price is 11.95        
    The price is 19.99        
    The price is 19.99        
    The price is 22.95        
    The price is 20.00        
    The price is 21.59        
    The price is 10.95        
    The price is 19.99        
    The price is 20.95        
    The price is 11.95        
    The price is 14.99        
     
    (12 row(s) affected)
    D. 使用 CAST 获得更多易读文本

    下面的示例在选择列表中使用 CAST 将 title 列转换为 char(50) 列,这样结果将更加易读。

    USE pubs
    GO
    SELECT CAST(title AS char(50)), ytd_sales
    FROM titles
    WHERE type = 'trad_cook'
    GO

    下面是结果集:

                                                           ytd_sales
    --------------------------------------------------     ---------
    Onions, Leeks, and Garlic: Cooking Secrets of the      375
    Fifty Years in Buckingham Palace Kitchens              15096
    Sushi, Anyone?                                         4095
     
    (3 row(s) affected)
    E. 使用带有 LIKE 子句的 CAST

    下面的示例将 int 列(ytd_sales 列)转换为 char(20) 列,以便使用 LIKE 子句。

    USE pubs
    GO
    SELECT title, ytd_sales
    FROM titles
    WHERE CAST(ytd_sales AS char(20)) LIKE '15%'
       AND type = 'trad_cook'
    GO

    下面是结果集:

    title                                                        ytd_sales   
    ------------------------------------------------------------ ----------- 
    Fifty Years in Buckingham Palace Kitchens                    15096       
     
    (1 row(s) affected)

    4COALESCE

    返回其参数中第一个非空表达式。

    语法

    COALESCE ( expression [ ,...n ] )

    参数

    expression

    任何类型的表达式。

    n

    表示可以指定多个表达式的占位符。所有表达式必须是相同类型,或者可以隐性转换为相同的类型。

    返回类型

    将相同的值作为 expression 返回。

    注释

    如果所有自变量均为 NULL,则 COALESCE 返回 NULL 值。

    COALESCE(expression1,...n) 与此 CASE 函数等价:

    CASE
       WHEN (expression1 IS NOT NULL) THEN expression1
       ...
       WHEN (expressionN IS NOT NULL) THEN expressionN
       ELSE NULL
    示例

    在下面的示例中,显示包含三列有关某个雇员每年工资收入信息的 wages 表:hourly_wage、salary 和 commission。但是,每个雇员只能接受一种付款方式。若要确定支付给所有雇员的工资总额,请使用 COALESCE 函数接受在 hourly_wage、salary 和 commission 中找到的非空值。

    SET NOCOUNT ON
    GO
    USE master
    IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 
          WHERE TABLE_NAME = 'wages')
       DROP TABLE wages
    GO
    CREATE TABLE wages
    (
       emp_id      tinyint    identity,
       hourly_wage   decimal   NULL,
       salary      decimal    NULL,
       commission   decimal   NULL,
       num_sales   tinyint   NULL
    )
    GO
    INSERT wages VALUES(10.00, NULL, NULL, NULL)
    INSERT wages VALUES(20.00, NULL, NULL, NULL)
    INSERT wages VALUES(30.00, NULL, NULL, NULL)
    INSERT wages VALUES(40.00, NULL, NULL, NULL)
    INSERT wages VALUES(NULL, 10000.00, NULL, NULL)
    INSERT wages VALUES(NULL, 20000.00, NULL, NULL)
    INSERT wages VALUES(NULL, 30000.00, NULL, NULL)
    INSERT wages VALUES(NULL, 40000.00, NULL, NULL)
    INSERT wages VALUES(NULL, NULL, 15000, 3)
    INSERT wages VALUES(NULL, NULL, 25000, 2)
    INSERT wages VALUES(NULL, NULL, 20000, 6)
    INSERT wages VALUES(NULL, NULL, 14000, 4)
    GO
    SET NOCOUNT OFF
    GO
    SELECT CAST(COALESCE(hourly_wage * 40 * 52, 
       salary, 
       commission * num_sales) AS money) AS 'Total Salary' 
    FROM wages
    GO

    下面是结果集:

    Total Salary 
    ------------ 
    20800.0000
    41600.0000
    62400.0000
    83200.0000
    10000.0000
    20000.0000
    30000.0000
    40000.0000
    45000.0000
    50000.0000
    120000.0000
    56000.0000
     
    (12 row(s) affected)

    5COLLATIONPROPERTY

    返回给定排序规则的属性。

    语法

    COLLATIONPROPERTY( collation_name, property )

    参数

    collation_name

    是排序规则的名称。collation_name 的数据类型为 nvarchar(128),且无默认值。

    property

    是排序规则的属性。property 的数据类型为 varchar(128),并且可以为下表中的任何值:

    属性名称

    描述

    CodePage

    排序规则的 nonUnicode 代码页。

    LCID

    排序规则的 Windows LCID。
    为 SQL 排序规则返回 NULL。

    ComparisonStyle

    排序规则的 Windows 比较风格。
    为二进制或 SQL 排序规则返回 NULL。

     

    返回类型

    sql_variant

    示例
    SELECT COLLATIONPROPERTY('Traditional_Spanish_CS_AS_KS_WS', 'CodePage')

    结果集

    1252 

    6CURRENT_TIMESTAMP

    返回当前的日期和时间。此函数等价于 GETDATE()。

    语法

    CURRENT_TIMESTAMP

    返回类型

    datetime

    示例
    A. 使用 CURRENT_TIMESTAMP 返回当前的日期和时间

    下面的示例返回 CURRENT_TIMESTAMP 的值和一个文本描述。

    SELECT 'The current time is: '+ CONVERT(char(30), CURRENT_TIMESTAMP)

    下面是结果集:

    --------------------------------------------------- 
    The current time is: Feb 24 1998 3:45PM            
     
    (1 row(s) affected)
    B. 将 CURRENT_TIMESTAMP 用作 DEFAULT 约束

    下面的示例创建一个表,该表针对销售行的 sales_date 列将 CURRENT_TIMESTAMP 用作 DEFAULT 约束。

    USE pubs
    GO
    CREATE TABLE sales2
    (
     sales_id int IDENTITY(10000, 1) NOT NULL,
     cust_id int NOT NULL,
     sales_date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
     sales_amt money NOT NULL,
     delivery_date datetime NOT NULL DEFAULT DATEADD(dd, 10, GETDATE())
    )
    GO
    INSERT sales2 (cust_id, sales_amt)
       VALUES (20000, 550)

    下面的查询从 sales2 表中选择所有信息。

    USE pubs
    GO
    SELECT * 
    FROM sales2
    GO

    下面是结果集:

    sales_id    cust_id    sales_date          sales_amt delivery_date               
    ----------- ---------- ------------------- --------- -------------------
    10000       20000      Mar 4 1998 10:06AM 550.00    Mar 14 1998 10:06AM
     
    (1 row(s) affected)

     

    CURRENT_USER

    返回当前的用户。此函数等价于 USER_NAME()。

    语法

    CURRENT_USER

    返回类型

    sysname

    示例
    A. 使用 CURRENT_USER 返回当前的用户名

    下面的示例将一个变量声明为 char,并将 CURRENT_USER 的当前值指派给它,然后返回该变量,返回时还带有一个文本描述。

    SELECT 'The current user is: '+ convert(char(30), CURRENT_USER)

    下面是结果集:

    --------------------------------------------------- 
    The current user is: dbo                            
     
    (1 row(s) affected)
    B. 将 CURRENT_USER 用作 DEFAULT 约束

    下面的示例创建一个表,该表针对销售行的 order_person 列将 CURRENT_USER 用作 DEFAULT 约束。

    USE pubs
    IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
          WHERE TABLE_NAME = 'orders2')
       DROP TABLE orders2
    GO
    SET NOCOUNT ON
    CREATE TABLE orders2
    (
     order_id int IDENTITY(1000, 1) NOT NULL,
     cust_id int NOT NULL,
     order_date datetime NOT NULL DEFAULT GETDATE(),
     order_amt money NOT NULL,
     order_person char(30) NOT NULL DEFAULT CURRENT_USER
    )
    GO
    INSERT orders2 (cust_id, order_amt)
    VALUES (5105, 577.95)
    GO
    SET NOCOUNT OFF

    下面的查询从 orders2 表中选择所有信息。

    SELECT * 
    FROM orders2

    下面是结果集:

    order_id    cust_id     order_date             order_amt    order_person                   
    ----------- ----------- ------------------- ------------- -------------- 
    1000        5105        Mar 4 1998 10:13AM      577.95           dbo                            
     
    (1 row(s) affected)

     

    8DATALENGTH

    返回任何表达式所占用的字节数。

    语法

    DATALENGTH ( expression )

    参数

    expression

    任何类型的表达式。

    返回类型

    int

    注释

    DATALENGTH 对 varchar、varbinary、text、image、nvarchar 和 ntext 数据类型特别有用,因为这些数据类型可以存储可变长度数据。

    NULL 的 DATALENGTH 的结果是 NULL。

    说明  兼容级别可能影响返回值。有关兼容级别的更多信息,请参见 sp_dbcmptlevel。

    示例

    此示例查找 publishers 表中 pub_name 列的长度。

    USE pubs
    GO
    SELECT length = DATALENGTH(pub_name), pub_name
    FROM publishers
    ORDER BY pub_name
    GO

    下面是结果集:

    length      pub_name                                 
    ----------- ---------------------------------------- 
    20          Algodata Infosystems                     
    16          Binnet & Hardley                         
    21          Five Lakes Publishing                    
    5           GGG&G                                    
    18          Lucerne Publishing                       
    14          New Moon Books                           
    17          Ramona Publishers                        
    14          Scootney Books                           
     
    (8 row(s) affected)

     

    9@@ERROR

    返回最后执行的 Transact-SQL 语句的错误代码。

    语法

    @@ERROR

    返回类型

    integer

    注释

    当 Microsoft® SQL Server™ 完成 Transact-SQL 语句的执行时,如果语句执行成功,则 @@ERROR 设置为 0。若出现一个错误,则返回一条错误信息。@@ERROR 返回此错误信息代码,直到另一条 Transact-SQL 语句被执行。您可以在 sysmessages 系统表中查看与 @@ERROR 错误代码相关的文本信息。

    由于 @@ERROR 在每一条语句执行后被清除并且重置,应在语句验证后立即检查它,或将其保存到一个局部变量中以备事后查看。

    示例
    A.用 @@ERROR 检测一个特定错误

    下面的示例用 @@ERROR 在一个 UPDATE 语句中检测限制检查冲突(错误 #547)。

    USE pubs
    GO
    UPDATE authors SET au_id = '172 32 1176'
    WHERE au_id = "172-32-1176"
     
    IF @@ERROR = 547
       print "A check constraint violation occurred"
    B.用 @@ERROR 有条件地退出一个过程

    在此示例中,IF...ELSE 语句在存储过程中的 INSERT 语句后检测 @@ERROR。@@ERROR 变量的值将决定传给调用程序的返回值,以指示此过程的成功与失败。

    USE pubs
    GO
     
    -- Create the procedure.
    CREATE PROCEDURE add_author 
    @au_id varchar(11),@au_lname varchar(40),
    @au_fname varchar(20),@phone char(12),
    @address varchar(40) = NULL,@city varchar(20) = NULL,
    @state char(2) = NULL,@zip char(5) = NULL,
    @contract bit = NULL
    AS
     
    -- Execute the INSERT statement.
    INSERT INTO authors
    (au_id, au_lname, au_fname, phone, address, 
     city, state, zip, contract) values
    (@au_id,@au_lname,@au_fname,@phone,@address,
     @city,@state,@zip,@contract)
     
    -- Test the error value.
    IF @@ERROR <> 0 
    BEGIN
       -- Return 99 to the calling program to indicate failure.
      PRINT "An error occurred loading the new author information"
       RETURN(99)
    END
    ELSE
    BEGIN
       -- Return 0 to the calling program to indicate success.
       PRINT "The new author information has been loaded"
       RETURN(0)
    END
    GO
    C.用 @@ERROR 检测几条语句的成功

    下面的示例取决于 INSERT 和 DELETE 语句的成功操作。局部变量在两条语句后均被设置为 @@ERROR 的值,并且用于此操作的共享错误处理例程中。

    USE pubs
    GO
    DECLARE @del_error int, @ins_error int
    -- Start a transaction.
    BEGIN TRAN
     
    -- Execute the DELETE statement.
    DELETE authors
    WHERE au_id = '409-56-7088'
     
    -- Set a variable to the error value for 
    -- the DELETE statement.
    SELECT @del_error = @@ERROR
     
    -- Execute the INSERT statement.
    INSERT authors
       VALUES('409-56-7008', 'Bennet', 'Abraham', '415 658-9932',
       '6223 Bateman St.', 'Berkeley', 'CA', '94705', 1)
    -- Set a variable to the error value for 
    -- the INSERT statement.
    SELECT @ins_error = @@ERROR
     
    -- Test the error values.
    IF @del_error = 0 AND @ins_error = 0
    BEGIN
       -- Success. Commit the transaction.
       PRINT "The author information has been replaced"    
       COMMIT TRAN
    END
    ELSE
    BEGIN
       -- An error occurred. Indicate which operation(s) failed
       -- and roll back the transaction.
       IF @del_error <> 0 
          PRINT "An error occurred during execution of the DELETE 
          statement." 
     
       IF @ins_error <> 0
          PRINT "An error occurred during execution of the INSERT 
          statement." 
     
       ROLLBACK TRAN
    END
    GO
    D. 与 @@ROWCOUNT 一同使用 @@ERROR

    下面的示例用 @@ERROR 和 @@ROWCOUNT 验证一条 UPDATE 语句的操作。为任何可能出现的错误而检验 @@ERROR 的值,而用 @@ROWCOUNT 保证更新已成功应用于表中的某行。

    USE pubs
    GO
    CREATE PROCEDURE change_publisher
    @title_id tid, 
    @new_pub_id char(4) 
    AS
     
    -- Declare variables used in error checking.
    DECLARE @error_var int, @rowcount_var int
     
    -- Execute the UPDATE statement.
    UPDATE titles SET pub_id = @new_pub_id 
    WHERE title_id = @title_id 
     
    -- Save the @@ERROR and @@ROWCOUNT values in local 
    -- variables before they are cleared.
    SELECT @error_var = @@ERROR, @rowcount_var = @@ROWCOUNT
     
    -- Check for errors. If an invalid @new_pub_id was specified
    -- the UPDATE statement returns a foreign-key violation error #547.
    IF @error_var <> 0
    BEGIN
       IF @error_var = 547
       BEGIN
          PRINT "ERROR: Invalid ID specified for new publisher"
          RETURN(1)
       END
       ELSE
       BEGIN
          PRINT "ERROR: Unhandled error occurred"
          RETURN(2)
       END
    END
     
    -- Check the rowcount. @rowcount_var is set to 0 
    -- if an invalid @title_id was specified.
    IF @rowcount_var = 0 
    BEGIN
       PRINT "Warning: The title_id specified is not valid"
       RETURN(1)
    END
    ELSE
    BEGIN
       PRINT "The book has been updated with the new publisher"
       RETURN(0)
    END
    GO

     

    10fn_helpcollations

    返回 Microsoft® SQL Server™ 2000 支持的所有排序规则的列表。

    语法

    fn_helpcollations ()

    返回表

    fn_helpcollations 返回下列信息。

    列名

    数据类型

    描述

    Name

    sysname

    标准排序规则名称

    Description

    nvarchar(1000)

    对排序规则的描述

     

    11fn_servershareddrives

    返回由群集服务器使用的共享驱动器名称。

    语法

    fn_servershareddrives()

    返回表

    如果当前服务器实例不是群集服务器,则 fn_servershareddrives 返回空行集。

    如果当前服务器是群集服务器,则 fn_servershareddrives 返回下列信息:

    名称

    数据类型

    描述

    DriveName

    nchar(1)

    共享驱动器的名称

     

    注释

    fn_servershareddrives 返回该群集服务器使用的共享驱动器的列表。这些共享驱动器与 SQL Server 资源属于同一群集组。此外,SQL Server 资源依赖于这些驱动器。

    该函数在识别用户可用的驱动器时十分有用。

    示例

    以下是在群集服务器实例上的查询。

    SELECT *
    FROM ::fn_servershareddrives()

    下面是结果集:

    DriveName
    --------
    m
    n

    12fn_virtualfilestats

    返回对数据库文件(包括日志文件)的 I/O 统计。

    语法

    fn_virtualfilestats ( [@DatabaseID=] database_id
        , [ @FileID = ] file_id )

    参数

    [@DatabaseID=] database_id

    数据库的 ID,database_id 的数据类型为 int,没有默认设置。

    [ @FileID = ] file_id

    文件的 ID,file_id 的数据类型为 int,没有默认设置。

    返回表

    Column Name

    数据类型

    描述

    DbId

    smallint

    数据库 ID

    FileId

    smallint

    文件 ID

    TimeStamp

    int

    提取数据的时间

    NumberReads

    bigint

    在文件上发出的读取次数

    NumberWrites

    bigint

    在文件上写入的次数

    BytesRead

    bigint

    在文件上发出的读取字节数

    BytesWritten

    bigint

    在文件上写入的字节数

    IoStallMS

    bigint

    用户等待在文件上完成 I/O 活动的总计时间(以毫秒为单位)

     

    注释

    fn_virtualfilestats 是系统表值函数,提供统计信息,如在文件上操作的 I/O 活动的总数。该函数有助于跟踪用户必须等待以读取或写入文件的时间长度。该函数还有助于识别出遇到大量 I/O 活动的文件。

    示例
    SELECT *
    FROM :: fn_virtualfilestats(1, 1)

    13FORMATMESSAGE

    从 sysmessages 现有的消息构造消息。FORMATMESSAGE 与 RAISERROR 语句的功能相似;但 RAISERROR 立即输出消息而 FORMATMESSAGE 返回编辑后的信息供进一步处理。

    语法

    FORMATMESSAGE ( msg_number , param_value [ ,...n ] )

    参数

    msg_number

    存储于 sysmessages 的消息的 ID。如果消息在 sysmessages 中不存在,则返回 NULL。

    param_value

    消息中使用的一个或多个参数值。值的顺序必须与占位符变量在消息中出现的次序相同。值的最大数目为 20。

    返回类型

    nvarchar

    注释

    与 RAISERROR 语句相像,FORMATMESSAGE 用所提供的参数值替换消息中的占位符变量来编辑消息。有关错误信息中允许使用的占位符和编辑进程的更多信息,请参见 RAISERROR。

    FORMATMESSAGE 查找用户当前语言的消息。如果消息没有本地化版本,则使用美国英语版本。

    对于本地化的消息,所提供的参数值必须与美国英语版本中的参数占位符相对应。也就是说,本地化版本的参数 1 必须对应于美国英语版本的参数 1,参数 2 必须对应于参数 2,依此类推。

    示例

    此示例使用假定的存储于 sysmessages 中的 50001 号消息"The number of rows in %s is %1d."(%s 的行数为 %1d。)。FORMATMESSAGE 用值 Table1 和 5 替换参数占位符。结果字符串"The number of rows in Table1 is 5."存储于局部变量 @var1。

    DECLARE @var1 VARCHAR(100)
    SELECT @var1 = FORMATMESSAGE(50001, 'Table1', 5)

    14GETANSINULL

    返回会话的数据库的默认为空性。

    语法

    GETANSINULL ( [ 'database' ] )

    参数

    'database'

    是要返回为空性信息的数据库名。database 是 char 类型或 nchar 类型。若 database 是 char 类型,则隐式转换为 nchar 类型。

    返回类型

    int

    注释

    当给定数据库为空性允许空值并且列或数据类型为空性没有显式定义,GETANSINULL 返回 1。这是 ANSI NULL 的默认值。

    若要激活 ANSI NULL 默认设置行为,必须设置下列条件之一:

    • sp_dboption 'database_name', 'ANSI null default', true
    • SET ANSI_NULL_DFLT_ON ON
    • SET ANSI_NULL_DFLT_OFF OFF
    示例

    下面的示例检查 pubs 数据库的默认为空性。

    USE pubs
    GO
    SELECT GETANSINULL('pubs')
    GO

    下面是结果集:

    ------ 
    1      
     
    (1 row(s) affected)

    15HOST_ID

    返回工作站标识号。

    语法

    HOST_ID ( )

    返回类型

    char(8)

    注释

    当该参数对系统函数可选时,则系统采用当前数据库、主机、服务器用户或数据库用户。内置函数后面必须跟圆括号。

    系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。

    示例

    下面的示例创建一个表,该表在 DEFAULT 定义中使用 HOST_ID() 来记录那些向记录订单的表中插入行的计算机终端 ID。

    CREATE TABLE Orders
       (OrderID     INT       PRIMARY KEY,
        CustomerID NCHAR(5) REFERENCES Customers(CustomerID),
        TerminalID CHAR(8)   NOT NULL DEFAULT HOST_ID(),
        OrderDate   DATETIME NOT NULL,
        ShipDate    DATETIME NULL,
        ShipperID   INT       NULL REFERENCES Shippers(ShipperID))
    GO

    16IDENT_SEED

    返回种子值(返回形式为 numeric(@@MAXPRECISION,0)),该值是在带有标识列的表或视图中创建标识列时指定的。

    语法

    IDENT_SEED ( 'table_or_view' )

    参数

    table_or_view

    一个表达式,指定表或视图以检查有效的标识种子值。table_or_view 可以是带有引号的字符串常量,也可以是变量、函数或列名。table_or_view 的数据类型为 char、nchar、varchar 或 nvarchar。

    返回类型

    数字

    示例

    下面的示例为 pubs 数据库中的 jobs 表返回 1,这是因为 jobs 表中包含带有种子值 1 的标识列。

    USE pubs
    SELECT TABLE_NAME, IDENT_SEED(TABLE_NAME) AS IDENT_SEED
    FROM INFORMATION_SCHEMA.TABLES
    WHERE IDENT_SEED(TABLE_NAME) IS NOT NULL

    下面是结果集:

    TABLE_NAME                                                   IDENT_SEED 
    ------------------------------------------------------------ ----------- 
    jobs                                                         1           
     
    (1 row(s) affected)

    17@@IDENTITY

    返回最后插入的标识值。

    语法

    @@IDENTITY

    返回类型

    numeric

    注释

    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含此语句产生的最后的标识值。若此语句没有影响任何有标识列的表,则 @@IDENTITY 返回 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 返回最后产生的标识值。如果此语句激发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将返回由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。

    在返回插入到表的 @@IDENTITY 列的最后一个值方面,@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 函数类似。

    @@IDENTITY 和 SCOPE_IDENTITY 将返回在当前会话的所有表中生成的最后一个标识值。但是,SCOPE_IDENTITY 只在当前作用域内返回值,而 @@IDENTITY 不限于特定的作用域。

    IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回任何会话和任何作用域中为特定表生成的标识值。有关更多信息,请参见 IDENT_CURRENT。

    示例

    下面的示例向带有标识列的表中插入一行,并用 @@IDENTITY 显示在新行中使用的标识值。

    INSERT INTO jobs (job_desc,min_lvl,max_lvl)
    VALUES ('Accountant',12,125)
    SELECT @@IDENTITY AS 'Identity'

    18IDENTITY(函数)

    只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。

    尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。

    语法

    IDENTITY ( data_type [ , seed , increment ] ) AS column_name

    参数

    data_type

    标识列的数据类型。标识列的有效数据类型可以是任何整数数据类型分类的数据类型(bit 数据类型除外),也可以是 decimal 数据类型。

    seed

    要指派给表中第一行的值。给每一个后续行指派下一个标识值,该值等于上一个 IDENTITY 值加上 increment 值。如果既没有指定 seed,也没有指定 increment,那么它们都默认为 1。

    increment

    用来添加到 seed 值以获得表中连续行的增量。

    column_name

    将插入到新表中的列的名称。

    返回类型

    返回与 data_type 相同的类型。

    注释

    因为该函数在表中创建一个列,所以必须用下列方式中的一种在选择列表中指定该列的名称:

    --(1)
    SELECT IDENTITY(int, 1,1) AS ID_Num
    INTO NewTable
    FROM OldTable
     
    --(2)
    SELECT ID_Num = IDENTITY(int, 1, 1)
    INTO NewTable
    FROM OldTable
    示例

    下面的示例将来自 pubs 数据库中 employee 表的所有行都插入到名为 employees 的新表。使用 IDENTITY 函数在 employees 表中从 100 而不是 1 开始编标识号。

    USE pubs
    IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
          WHERE TABLE_NAME = 'employees')
       DROP TABLE employees
    GO
    EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'true'
     
    SELECT emp_id AS emp_num, 
       fname AS first, 
       minit AS middle, 
       lname AS last, 
       IDENTITY(smallint, 100, 1) AS job_num, 
       job_lvl AS job_level, 
       pub_id, 
       hire_date
    INTO employees 
    FROM employee
    GO
    USE pubs
    EXEC sp_dboption 'pubs', 'select into/bulkcopy', 'false'

     

    19ISDATE

    确定输入表达式是否为有效的日期。

    语法

    ISDATE ( expression )

    参数

    expression

    一个表达式,将要验证它是否为一个日期。expression 是任何返回 varchar 数据类型的表达式。

    返回类型

    int

    注释

    如果输入表达式是有效的日期,那么 ISDATE 返回 1;否则,返回 0。下表显示一组示例所得到的返回值。

    列值 (varchar)

    ISDATE 返回值

    NULL

    0

    Abc

    0

    100、-100、100 a 或 100.00

    0

    .01

    0

    -100.1234e-123

    0

    .231e90

    0

    $100.12345、- $100.12345 或 $-1000.123

    0

    as100 或 1a00

    0

    1995-10-11/20/95、1995-10-1 12:00pm、Feb 7 1995 11:00pm、1995-10-1 或者 1/23/95

    1

    13/43/3425 或 1995-10-1a

    0

    $1000、$100 或 $100 a

    0

     

    示例
    A. 使用 ISDATE 检查变量

    下面的示例检查 @datestring 局部变量是否为有效的日期。

    DECLARE @datestring varchar(8)
    SET @datestring = '12/21/98'
    SELECT ISDATE(@datestring)

    下面是结果集:

    ----------- 
    1           
    B. 使用 ISDATE 检查列是否为有效的日期

    下面的示例创建 test_dates 表,并且插入两个值。使用 ISDATE 以确定列中的值是否为日期。

    USE tempdb
    CREATE TABLE test_dates (Col_1 varchar(15), Col_2 datetime)
    GO
    INSERT INTO test_dates VALUES ('abc', 'July 13, 1998')
    GO
    SELECT ISDATE(Col_1) AS Col_1, ISDATE(Col_2) AS Col_2 
       FROM test_dates

    下面是结果集:

    Col_1                     Col_2               
    -----------------         --------------------
    0                         1                   

    20ISNULL

    使用指定的替换值替换 NULL。

    语法

    ISNULL ( check_expression , replacement_value )

    参数

    check_expression

    将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。

    replacement_value

    在 check_expression 为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。

    返回类型

    返回与 check_expression 相同的类型。

    注释

    如果 check_expression 不为 NULL,那么返回该表达式的值;否则返回 replacement_value。

    示例
    A. 将 ISNULL 与 AVG 一起使用

    下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目。

    USE pubs
    GO
    SELECT AVG(ISNULL(price, $10.00))
    FROM titles
    GO

    下面是结果集:

    -------------------------- 
    14.24                      
     
    (1 row(s) affected)
    B. 使用 ISNULL

    下面的示例为 titles 表中的所有书选择书名、类型及价格。如果一个书名的价格是 NULL,那么在结果集中显示的价格为 0.00。

    USE pubs
    GO
    SELECT SUBSTRING(title, 1, 15) AS Title, type AS Type, 
       ISNULL(price, 0.00) AS Price
    FROM titles
    GO

    下面是结果集:

    Title           Type         Price          
    --------------- ------------ -------------------------- 
    The Busy Execut business     19.99                      
    Cooking with Co business     11.95                      
    You Can Combat business     2.99                       
    Straight Talk A business     19.99                      
    Silicon Valley mod_cook     19.99                      
    The Gourmet Mic mod_cook     2.99                       
    The Psychology UNDECIDED    0.00                       
    But Is It User popular_comp 22.95                      
    Secrets of Sili popular_comp 20.00                      
    Net Etiquette   popular_comp 0.00                       
    Computer Phobic psychology   21.59                      
    Is Anger the En psychology   10.95                      
    Life Without Fe psychology   7.00                       
    Prolonged Data psychology   19.99                      
    Emotional Secur psychology   7.99                       
    Onions, Leeks, trad_cook    20.95                      
    Fifty Years in trad_cook    11.95                      
    Sushi, Anyone? trad_cook    14.99 

     

    ISNUMERIC

    确定表达式是否为一个有效的数字类型。

    语法

    ISNUMERIC ( expression )

    参数

    expression

    要计算的表达式。

    返回类型

    int

    注释

    当输入表达式得数为一个有效的整数、浮点数、money 或 decimal 类型,那么 ISNUMERIC 返回 1;否则返回 0。返回值为 1 确保可以将 expression 转换为上述数字类型中的一种。

    示例
    A. 使用 ISNUMERIC

    下面的示例返回 1,这是因为 zip 列包含有效的数值。

    USE pubs
    SELECT ISNUMERIC(zip) 
    FROM authors
    GO
    B. 使用 ISNUMERIC 和 SUBSTRING

    下面的示例对于 titles 表中的所有书名都返回 0,这是因为没有一个书名是有效的数值。

    USE pubs
    GO
    -- Because the title column is all character data, expect a result of 0
    -- for the ISNUMERIC function.
    SELECT SUBSTRING(title, 1, 15) type, price, ISNUMERIC(title)
    FROM titles
    GO

    下面是结果集:

    type            price                                  
    --------------- -------------------------- ----------- 
    The Busy Execut 19.99                      0           
    Cooking with Co 11.95                      0           
    You Can Combat 2.99                       0           
    Straight Talk A 19.99                      0           
    Silicon Valley 19.99                      0           
    The Gourmet Mic 2.99                       0           
    The Psychology (null)                     0           
    But Is It User 22.95                      0           
    Secrets of Sili 20.00                      0           
    Net Etiquette   (null)                     0           
    Computer Phobic 21.59                      0           
    Is Anger the En 10.95                      0           
    Life Without Fe 7.00                       0           
    Prolonged Data 19.99                      0           
    Emotional Secur 7.99                       0           
    Onions, Leeks, 20.95                      0           
    Fifty Years in 11.95                      0           
    Sushi, Anyone? 14.99                      0           
     
    (18 row(s) affected)

     

    22NEWID

    创建 uniqueidentifier 类型的唯一值。

    语法

    NEWID ( )

    返回类型

    uniqueidentifier

    示例
    A.对变量使用 NEWID 函数

    下面的示例使用 NEWID 对声明为 uniqueidentifier 数据类型的变量赋值。在测试该值前,将先打印 uniqueidentifier 数据类型变量的值。

    -- Creating a local variable with DECLARE/SET syntax.
    DECLARE @myid uniqueidentifier
    SET @myid = NEWID()
    PRINT 'Value of @myid is: '+ CONVERT(varchar(255), @myid)

    下面是结果集:

    Value of @myid is: 6F9619FF-8B86-D011-B42D-00C04FC964FF

    说明  对于每台计算机,由 NEWID 返回的值不同。所显示的数字仅起解释说明的作用。

    B.在 CREATE TABLE 语句中使用 NEWID

    下面的示例创建具有 uniqueidentifier 数据类型的 cust 表,并使用 NEWID 将默认值填充到表中。为 NEWID() 赋默认值时,每个新行和现有行均具有 cust_id 列的唯一值。

    -- Creating a table using NEWID for uniqueidentifier data type. 
    CREATE TABLE cust
    (
     cust_id uniqueidentifier NOT NULL
       DEFAULT newid(),
     company varchar(30) NOT NULL,
     contact_name varchar(60) NOT NULL, 
     address varchar(30) NOT NULL, 
     city varchar(30) NOT NULL,
     state_province varchar(10) NULL,
     postal_code varchar(10) NOT NULL, 
     country varchar(20) NOT NULL, 
     telephone varchar(15) NOT NULL,
     fax varchar(15) NULL
    )
    GO
    -- Inserting data into cust table.
    INSERT cust
    (cust_id, company, contact_name, address, city, state_province, 
     postal_code, country, telephone, fax)
    VALUES
    (newid(), 'Wartian Herkku', 'Pirkko Koskitalo', 'Torikatu 38', 'Oulu', NULL,
     '90110', 'Finland', '981-443655', '981-443655')
    INSERT cust
    (cust_id, company, contact_name, address, city, state_province,
    postal_code, country, telephone, fax)
    VALUES 
    (newid(), 'Wellington Importadora', 'Paula Parente', 'Rua do Mercado, 12', 'Resende', 'SP',
     '08737-363', 'Brazil', '(14) 555-8122', '')
    INSERT cust
    (cust_id, company, contact_name, address, city, state_province,
     postal_code, country, telephone, fax)
    VALUES
    (newid(), 'Cactus Comidas para Ilevar', 'Patricio Simpson', 'Cerrito 333', 'Buenos Aires', NULL, 
     '1010', 'Argentina', '(1) 135-5555', '(1) 135-4892')
    INSERT cust
    (cust_id, company, contact_name, address, city, state_province,
     postal_code, country, telephone, fax)
    VALUES 
    (newid(), 'Ernst Handel', 'Roland Mendel', 'Kirchgasse 6', 'Graz', NULL,
     '8010', 'Austria', '7675-3425', '7675-3426')
    INSERT cust
    (cust_id, company, contact_name, address, city, state_province,
     postal_code, country, telephone, fax)
    VALUES 
    (newid(), 'Maison Dewey', 'Catherine Dewey', 'Rue Joseph-Bens 532', 'Bruxelles', NULL,
     'B-1180', 'Belgium', '(02) 201 24 67', '(02) 201 24 68')
    GO
    C. 使用 uniqueidentifier 和变量赋值

    下面的示例声明局部变量 @myid 为 uniqueidentifier 数据类型。然后使用 SET 语句为该变量赋值。

    DECLARE @myid uniqueidentifier 
    SET @myid = 'A972C577-DFB0-064E-1189-0154C99310DAAC12'

    23NULLIF

    如果两个指定的表达式相等,则返回空值。

    语法

    NULLIF ( expression , expression )

    参数

    expression

    常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组合。

    返回类型

    返回类型与第一个 expression 相同。

    如果两个表达式不相等,NULLIF 返回第一个 expression 的值。如果相等,NULLIF 返回第一个 expression 类型的空值。

    注释

    如果两个表达式相等且结果表达式为 NULL,NULLIF 等价于 CASE 的搜索函数。

    示例

    下面的示例创建 budgets 表,表中显示部门 (dept) 及其当年的预算 (current_year) 以及去年预算 (previous_year)。对于当年预算,那些同去年相比预算没有改变的部门使用 NULL,那些预算还没有确定的部门使用 0。要只计算那些接收预算的部门的预算平均值,并引用上一年度的预算值(当 current_year 为 0 时,使用 previous_year 值),请组合使用 NULLIF 和 COALESCE 函数。

    USE pubs
    IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
          WHERE TABLE_NAME = 'budgets')
       DROP TABLE budgets
    GO
    SET NOCOUNT ON
    CREATE TABLE budgets
    (
       dept            tinyint   IDENTITY,
       current_year      decimal   NULL,
       previous_year   decimal   NULL
    )
    INSERT budgets VALUES(100000, 150000)
    INSERT budgets VALUES(NULL, 300000)
    INSERT budgets VALUES(0, 100000)
    INSERT budgets VALUES(NULL, 150000)
    INSERT budgets VALUES(300000, 250000)
    GO 
    SET NOCOUNT OFF
    SELECT AVG(NULLIF(COALESCE(current_year,
       previous_year), 0.00)) AS 'Average Budget'
    FROM budgets
    GO

    下面是结果集:

    Average Budget                           
    ---------------------------------------- 
    212500.000000
     
    (1 row(s) affected)

     

    24PARSENAME

    返回对象名的指定部分。可以检索的对象部分有对象名、所有者名称、数据库名称和服务器名称。

    说明  PARSENAME 函数不表明所指定名称的对象是否存在,而只是返回给定对象名的指定部分。

    语法

    PARSENAME ( 'object_name' , object_piece )

    参数

    'object_name'

    要检索其指定部分的对象名。object_name 是 sysname 值。本参数是可选的合法对象名。如果该对象名的所有部分均符合要求,则该名称由以下四部分组成:服务器名称、数据库名称、所有者名称和对象名。

    object_piece

    要返回的对象部分。object_piece 是 int 值,可以为下列值。

    Value

    描述

    1

    对象名

    2

    所有者名称

    3

    数据库名称

    4

    服务器名称

     

    返回类型

    nchar

    注释

    如果符合下列条件之一,则 PARSENAME 返回 NULL 值:

    • object_name 或 object_piece 为 NULL 值。
    • 发生语法错误。
    • 所请求的对象部分长度为 0,并且是无效的 Microsoft® SQL Server™ 标识符。零长度的对象名将导致整个合法名称无效。
    示例

    本示例使用 PARSENAME 返回有关 pubs 数据库中 authors 表的信息。

    USE pubs
    SELECT PARSENAME('pubs..authors', 1) AS 'Object Name'
    SELECT PARSENAME('pubs..authors', 2) AS 'Owner Name'
    SELECT PARSENAME('pubs..authors', 3) AS 'Database Name'
    SELECT PARSENAME('pubs..authors', 4) AS 'Server Name'

    下面是结果集:

    Object Name                    
    ------------------------------ 
    authors                        
     
    (1 row(s) affected)
     
    Owner Name                     
    ------------------------------ 
    (null)                         
     
    (1 row(s) affected)
     
    Database Name                  
    ------------------------------ 
    pubs                           
     
    (1 row(s) affected)
     
    Server Name                    
    ------------------------------ 
    (null)                         
     
    (1 row(s) affected)

    25PERMISSIONS

    返回一个包含位图的值,表明当前用户的语句、对象或列权限。

    语法

    PERMISSIONS ( [ objectid [ , 'column' ] ] )

    参数

    objectid

    对象的 ID。如果未指定 objectid,则位图值包含当前用户的语法权限;否则,位图包含当前用户在该对象 ID 上的对象权限。指定的对象必须在当前数据库中。将 OBJECT_ID 函数用于对象名以确定 objectid 值。

    column

    返回其权限信息的列的可选名。该列必须是 objectid 所指定表中的有效列名。

    返回类型

    int

    注释

    可使用 PERMISSIONS 确定当前用户是否有执行某个语句所需的权限,或者是否有将某个对象上的权限授予另一用户所需的权限。

    所返回的权限信息是 32 位位图。

    低 16 位反映对当前用户的安全帐户所授予的权限,以及应用于当前用户所在的 Microsoft® Windows NT® 组或 Microsoft SQL Server™ 角色的权限。例如,当没有指定 objectid 时,将返回值 66(十六进制值 0x42),表示当前用户有执行 CREATE TABLE(十进制值 2)和 BACKUP DATABASE(十进制值 64)语句的权限。

    高 16 位反映当前用户可以授予其他用户的权限。除左移 16 位(与 65536 相乘)之外,高 16 位的解释方式与下表中所介绍的低 16 位的解释方式完全相同。例如,位 0x8(十进制值 8)说明当指定 objectid 时的 INSERT 权限。而 0x80000(十进制值 524288)说明 GRANT INSERT 权限的能力,这是因为 524288 = 8 x 65536。由于角色中的成员资格,该用户可能没有执行语句的权限,但仍然能够将该权限授予他人。

    下表显示语句权限所使用的位(未指定 objectid)。

    位(十进制)

    位(十六进制)

    语句权限

    1

    0x1

    CREATE DATABASE(仅限于 master 数据库)

    2

    0x2

    CREATE TABLE

    4

    0x4

    CREATE PROCEDURE

    8

    0x8

    CREATE VIEW

    16

    0x10

    CREATE RULE

    32

    0x20

    CREATE DEFAULT

    64

    0x40

    BACKUP DATABASE

    128

    0x80

    BACKUP LOG

    256

    0x100

    保留

     

    下表显示当仅指定 objectid 时,返回的对象权限所使用的位。

    位(十进制)

    位(十六进制)

    语句权限

    1

    0x1

    SELECT ALL

    2

    0x2

    UPDATE ALL

    4

    0x4

    REFERENCES ALL

    8

    0x8

    INSERT

    16

    0x10

    DELETE

    32

    0x20

    EXECUTE(仅限于过程)

    4096

    0x1000

    SELECT ANY(至少一列)

    8192

    0x2000

    UPDATE ANY

    16384

    0x4000

    REFERENCES ANY

     

    下表显示当同时指定 objectid 和 column 时,返回的列级对象权限所使用的位。

    位(十进制)

    位(十六进制)

    语句权限

    1

    0x1

    SELECT

    2

    0x2

    UPDATE

    4

    0x4

    REFERENCES

     

    如果指定的参数为 NULL 值或无效(例如,objectid 或 column 不存在),则返回 NULL 值。没有定义不适用的权限所使用的位值(例如,表的 EXECUTE 权限、位 0x20)。

    使用按位 AND (&) 运算符确定 PERMISSIONS 函数返回的位图中的每个位集。

    还可使用 sp_helprotect 系统存储过程返回某位用户在当前数据库中的对象权限列表。

    示例
    A. 对语句权限使用 PERMISSIONS 函数

    本示例确定当前用户是否能够执行 CREATE TABLE 语句。

    IF PERMISSIONS()&2=2
       CREATE TABLE test_table (col1 INT)
    ELSE
       PRINT 'ERROR: The current user cannot create a table.'
    B. 对对象权限使用 PERMISSIONS 函数

    本示例确定当前用户是否能够在 authors 表中插入数据行。

    IF PERMISSIONS(OBJECT_ID('authors'))&8=8 
       PRINT 'The current user can insert data into authors.'
    ELSE
       PRINT 'ERROR: The current user cannot insert data into authors.'
    C. 对可授予的权限使用 PERMISSIONS 函数

    本示例确定当前用户是否能够将 authors 表中的 INSERT 权限授予另一用户。

    IF PERMISSIONS(OBJECT_ID('authors'))&0x80000=0x80000
       PRINT 'INSERT on authors is grantable.'
    ELSE
       PRINT 'You may not GRANT INSERT permissions on authors.'

     

    26@@ROWCOUNT

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

    语法

    @@ROWCOUNT

    返回类型

    integer

    注释

    任何不返回行的语句将这一变量设置为 0 ,如 IF 语句。

    示例

    下面的示例执行 UPDATE 语句并用 @@ROWCOUNT 来检测是否有发生更改的行。

    UPDATE authors SET au_lname = 'Jones'
    WHERE au_id = '999-888-7777'
    IF @@ROWCOUNT = 0
       print 'Warning: No rows were updated'

    27ROWCOUNT_BIG

    返回受执行的最后一个语句影响的行数。该函数的功能与 @@ROWCOUNT 一样,除非 ROWCOUNT_BIG 的返回类型是 bigint。

    语法

    ROWCOUNT_BIG ( )

    返回类型

    bigint

    注释

    位于 SELECT 语句之后时,该函数返回由 SELECT 语句返回的行数。

    位于 INSERT、UPDATE 或 DELETE 语句之后时,该函数返回受数据修改语句影响的行数。

    位于 IF 这类不返回行的语句之后时,该函数返回零 (0)。

    请参见

    28SCOPE_IDENTITY

    返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

    语法

    SCOPE_IDENTITY( )

    返回类型

    sql_variant

    注释

    SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY 在功能上相似,因为它们都返回插入到 IDENTITY 列中的值。

    IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。有关更多信息,请参见 IDENT_CURRENT。

    SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。

    例如,有两个表 T1 和 T2,在 T1 上定义了一个 INSERT 触发器。当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。

    假设 T1 和 T2 都有 IDENTITY 列,@@IDENTITY 和 SCOPE_IDENTITY 将在 T1 上的 INSERT 语句的最后返回不同的值。

    @@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。

    SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。如果在作用域中发生插入语句到标识列之前唤醒调用 SCOPE_IDENTITY() 函数,则该函数将返回 NULL 值。

    有关说明,请参见示例。

    示例

    下列示例将创建两个表 TZ 和 TY,并在 TZ 上创建一个 INSERT 触发器。当将某行插入表 TZ 中时,触发器 (Ztrig) 将激发并在 TY 中插入一行。

    USE tempdb
    GO
    CREATE TABLE TZ (
       Z_id int IDENTITY(1,1)PRIMARY KEY,
       Z_name varchar(20) NOT NULL)
     
    INSERT TZ
       VALUES ('Lisa')
    INSERT TZ
       VALUES ('Mike')
    INSERT TZ
       VALUES ('Carla')
     
    SELECT * FROM TZ
     
    --Result set: This is how table TZ looks
    Z_id   Z_name
    -------------
    1      Lisa
    2      Mike
    3      Carla
     
    CREATE TABLE TY (
       Y_id int IDENTITY(100,5)PRIMARY KEY,
       Y_name varchar(20) NULL)
     
    INSERT TY (Y_name)
       VALUES ('boathouse')
    INSERT TY (Y_name)
       VALUES ('rocks')
    INSERT TY (Y_name)
       VALUES ('elevator')
     
    SELECT * FROM TY
    --Result set: This is how TY looks:
    Y_id Y_name
    ---------------
    100   boathouse
    105   rocks
    110   elevator
     
    /*Create the trigger that inserts a row in table TY 
    when a row is inserted in table TZ*/
    CREATE TRIGGER Ztrig
    ON TZ
    FOR INSERT AS 
       BEGIN
       INSERT TY VALUES ('')
       END
     
    /*FIRE the trigger and find out what identity values you get 
    with the @@IDENTITY and SCOPE_IDENTITY functions*/
    INSERT TZ VALUES ('Rosalie')
     
    SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
    GO
    SELECT   @@IDENTITY AS [@@IDENTITY]
    GO
     
    --Here is the result set.
    SCOPE_IDENTITY
    4
    /*SCOPE_IDENTITY returned the last identity value in the same scope, which was the insert on table TZ*/
     
    @@IDENTITY
    115
    /*@@IDENTITY returned the last identity value inserted to TY by the trigger, which 

     

    29SERVERPROPERTY

    返回有关服务器实例的属性信息。

    语法

    SERVERPROPERTY ( propertyname )

    参数

    propertyname

    是包含要返回的服务器属性信息的表达式。Propertyname 可以是下列值中的一个。

    属性名称

    返回的值

    Collation

    服务器的默认排序规则名称。

    如果输入无效或发生错误,则返回 NULL。

    基本数据类型:nvarchar

    Edition

    安装在服务器上的 Microsoft® SQL Server™ 实例版本。

    返回:

    'Desktop Engine'
    'Developer Edition'
    'Enterprise Edition'
    'Enterprise Evaluation Edition'
    'Personal Edition'
    'Standard Edition'

    基本数据类型:nvarchar(128)

    Engine Edition

    安装在服务器上的 SQL Server 实例引擎版本。

    1 = 个人或 Desktop Engine
    2 = 标准
    3 = 企业(适用于企业版、企业评估版和开发版)

    基本数据类型:int

    InstanceName

    用户连接到的实例的名称。

    如果实例名称是默认实例,或者输入无效或发生错误,则返回 NULL。

    基本数据类型:nvarchar

    IsClustered

    在故障转移群集中配置服务器实例。

    1 = 聚集。
    0 = 非聚集。
    NULL = 输入无效或发生错误。

    基本数据类型:int

    IsFullTextInstalled

    在 SQL Server 的当前实例中安装全文组件。

    1 = 已安装全文组件。
    0 = 未安装全文组件。
    NULL = 输入无效或发生错误。

    基本数据类型:int

    IsIntegratedSecurityOnly

    服务器为集成安全模式。

    1 = 集成安全模式。
    0 = 非集成安全模式。
    NULL = 输入无效或发生错误。

    基本数据类型:int

    IsSingleUser

    服务器为单用户模式。

    1 = 单用户。
    0 = 非单用户
    NULL = 无效输入或错误。

    基本数据类型:int

    IsSyncWithBackup

    数据库为发布数据库或分发数据库,并且在还原时不用中断事务复制。

    1 = 真。
    0 = 假。

    基本数据类型:int

    LicenseType

    SQL Server实例模式。

    PER_SEAT = 单机模式
    PER_PROCESSOR = 单处理器模式
    DISABLED = 禁用许可。

    基本数据类型:nvarchar(128)

    MachineName

    服务器实例在其上运行的 Windows NT 计算机名称。

    对于聚集实例,即在 Microsoft Cluster Server 的虚拟服务器上运行的 SQL Server 实例,返回虚拟服务器的名称。

    如果输入无效或发生错误,则返回 NULL。

    基本数据类型:nvarchar

    NumLicenses

    如果是单机模式,则为该 SQL Server 实例的注册客户端许可数。

    如果是单处理器模式,则为该 SQL Server 实例的许可处理器数。

    如果不是上述模式,则返回 NULL 值。

    基本数据类型:int

    ProcessID

    SQL Server 服务的进程 ID。(ProcessID 在标识属于该实例的 sqlservr.exe 方面很有用。)

    如果输入无效或发生错误,则返回 NULL。

    基本数据类型:int

    ProductVersion

    SQL Server 实例的版本,格式为"major.minor.build"。

    基本数据类型:varchar(128)

    ProductLevel

    SQL Server 实例的版本级别。

    返回:
    'RTM' = 发售版。
    'SPn' = 服务包版
    'Bn', = beta 测试版

    基本数据类型:nvarchar(128)。

    ServerName

    Windows NT 服务器和与指定的 SQL Server 实例关联的实例信息。

    如果输入无效或发生错误,则返回 NULL。

    基本数据类型:nvarchar

     

    返回类型

    sql_variant

    注释

    SERVERPROPERTY 函数的 ServerName 属性与 @@SERVERNAME 返回相似的信息。ServerName 属性提供 Windows NT 服务器和实例名称,两者共同构成唯一的服务器实例。@@SERVERNAME 提供当前配置的本地服务器名称。

    如果安装时未更改默认服务器名称,则 ServerName 属性和 @@SERVERNAME 返回相同的信息。通过执行 sp_addserver 和 sp_dropserver 可以配置本地服务器名称。

    如果在安装时已将本地服务器名称从默认服务器名称更改成其它名称,则 @@SERVERNAME 返回更改后的新名称。

    示例

    该示例在 SELECT 语句中使用 SERVERPROPERTY 函数返回有关当前服务器的信息。如果 Windows NT 服务器安装了多个 SQL Server 实例,而且客户端需要打开另一个到当前连接所使用的同一实例的连接时,此方案很有用。

    SELECT   CONVERT(char(20), SERVERPROPERTY('servername'))

     

    30SESSIONPROPERTY

    返回会话的 SET 选项设置。

    语法

    SESSIONPROPERTY ( option )

    参数

    option

    是该会话的当前选项设置。option 可以是下列值中的一个。

    选项

    描述

    ANSI_NULLS

    指定是否对空值上的等号 (=) 和不等号 (<>)应用遵从 SQL-92 标准行为。

    1 = ON
    0 = OFF

    ANSI_PADDING

    控制列存储小于定义的列大小的值的方式,以及列存储在字符串和 binary 数据中有尾随空格的值的方式。

    1 = ON
    0 = OFF

    ANSI_WARNINGS

    指定是否对某些情况(包括被零除和算术溢出)生成错误信息或警告应用 SQL-92 标准行为。

    1 = ON
    0 = OFF

    ARITHABORT

    确定在执行查询过程中发生溢出或被零除的错误时是否终止查询。

    1 = ON
    0 = OFF

    CONCAT_NULL_YIELDS_
    NULL

    控制是将串联结果视为空值还是空字符串值。

    1 = ON
    0 = OFF

    NUMERIC_ROUNDABORT

    指定当表达式中的四舍五入导致精度降低时是否生成错误信息和警告。

    1 = ON
    0 = OFF

    QUOTED_IDENTIFIER

    指定是否遵从 SQL-92 关于使用引号分隔标识符和文字字符串的规则。

    1 = ON
    0 = OFF

    <任何其它字符串>

    NULL = 无效的输入

     

    返回类型

    sql_variant

    注释

    通过组合服务器级别、数据库级别和用户指定的选项对 SET 选项进行配置。

    示例

    下例返回 CONCAT_NULL_YIELDS_NULL 选项的设置。

    SELECT   SESSIONPROPERTY ('CONCAT_NULL_YIELDS_NULL')

     

    31SESSION_USER

    是一个 niladic 函数,允许在未指定默认值时将系统为当前会话的用户名提供的值插入到表中。还允许在查询、错误信息等中使用用户名。

    语法

    SESSION_USER

    返回类型

    nchar

    注释

    SESSION_USER 可在 CREATE TABLE 或 ALTER TABLE 语句中与 DEFAULT 约束一起使用,或者用作任何标准函数。

    示例
    A. 使用 SESSION_USER 返回会话的当前用户名

    下例声明一个 char 类型的变量,并将 SESSION_USER 赋为当前值,然后输出该变量并带有文本描述。

    DECLARE @session_usr char(30)
    SET @session_usr = SESSION_USER
    SELECT 'This session''s current user is: '+ @session_usr
    GO

    下面是结果集:

    -------------------------------------------------------------- 
    This session's current user is: dbo                            
     
    (1 row(s) affected)
    B. 将 SESSION_USER 与 DEFAULT 约束一起使用

    下例将 SESSION_USER niladic 函数用作 DEFAULT 约束为交货人创建表。

    USE pubs
    GO
    CREATE TABLE deliveries2
    (
     order_id int IDENTITY(5000, 1) NOT NULL,
     cust_id int NOT NULL,
     order_date datetime NOT NULL DEFAULT GETDATE(),
     delivery_date datetime NOT NULL DEFAULT DATEADD(dd, 10, GETDATE()),
     delivery_person char(30) NOT NULL DEFAULT SESSION_USER
    )
    GO
    INSERT deliveries2 (cust_id)
    VALUES (7510)
    INSERT deliveries2 (cust_id)
    VALUES (7231)
    INSERT deliveries2 (cust_id)
    VALUES (7028)
    INSERT deliveries2 (cust_id)
    VALUES (7392)
    INSERT deliveries2 (cust_id)
    VALUES (7452)
    GO

    以下查询选择 deliveries2 表中的全部信息。

    SELECT order_id AS 'Ord#', cust_id AS 'Cust#', order_date, 
       delivery_date, delivery_person AS 'Delivery'
    FROM deliveries2
    ORDER BY order_id
    GO

    下面是结果集:

    Ord# Cust# order_date          delivery_date        Delivery     
    ---- ------ ------------------ -------------------- ----------------
    5000 7510   Mar 4 1998 10:21AM Mar 14 1998 10:21AM dbo                            
    5001 7231   Mar 4 1998 10:21AM Mar 14 1998 10:21AM dbo                            
    5002 7028   Mar 4 1998 10:21AM Mar 14 1998 10:21AM dbo                            
    5003 7392   Mar 4 1998 10:21AM Mar 14 1998 10:21AM dbo                            
    5004 7452   Mar 4 1998 10:21AM Mar 14 1998 10:21AM dbo                            
     
    (5 row(s) affected)

    32STATS_DATE

    返回最后一次更新指定索引统计的日期。

    语法

    STATS_DATE ( table_id , index_id )

    参数

    table_id

    是所用表的 ID。

    index_id

    是所用索引的 ID。

    返回类型

    datetime

    注释

    系统函数可以在选择列表、WHERE 子句和任何允许使用表达式的地方使用。

    示例

    下例返回最后一次更新指定对象统计的日期。

    USE master
    GO
    SELECT 'Index Name' = i.name, 
       'Statistics Date' = STATS_DATE(i.id, i.indid)
    FROM sysobjects o, sysindexes i
    WHERE o.name = 'employee' AND o.id = i.id
    GO

     

    33SYSTEM_USER

    当未指定默认值时,允许将系统为当前系统用户名提供的值插入表中。

    语法

    SYSTEM_USER

    注释

    在 CREATE TABLE 或 ALTER TABLE 语句中将 SYSTEM_USER niladic 函数用在 DEFAULT 约束中,或作为任何标准函数使用。

    如果当前用户使用 Windows 身份验证登录到 Microsoft® SQL Server™,SYSTEM_USER 将返回 Windows 2000 或 Windows NT 4.0 登录标识名称,例如"DOMAIN\user_login_name"。然而,如果当前用户使用 SQL Server 身份验证登录到 SQL Server,SYSTEM_USER 将返回 SQL Server 登录标识名称,例如,当用户以 sa 登录时将返回 sa。

    示例
    A. 使用 SYSTEM_USER 返回当前系统用户名

    本示例声明一个 char 变量,将 SYSTEM_USER 的当前值置于该变量中,然后打印该变量。

    DECLARE @sys_usr char(30)
    SET @sys_usr = SYSTEM_USER
    SELECT 'The current system user is: '+ @sys_usr
    GO

    下面是结果集:

    ---------------------------------------------------------- 
    The current system user is: sa                             
     
    (1 row(s) affected)
    B. 在 DEFAULT 约束中使用 SYSTEM_USER

    本示例创建一个表,将 SYSTEM_USER 用作病人数据行中 receptionist 列的 DEFAULT 约束。

    USE pubs
    GO
    CREATE TABLE appointments2
    (
     patient_id int IDENTITY(2000, 1) NOT NULL,
     doctor_id int NOT NULL,
     appt_date datetime NOT NULL DEFAULT GETDATE(),
     receptionist varchar(30) NOT NULL DEFAULT SYSTEM_USER
    )
    GO
    INSERT appointments2 (doctor_id)
    VALUES (151)
    INSERT appointments2 (doctor_id, appt_date)
    VALUES (293, '5/15/98')
    INSERT appointments2 (doctor_id, appt_date)
    VALUES (27882, '6/20/98')
    INSERT appointments2 (doctor_id)
    VALUES (21392)
    INSERT appointments2 (doctor_id, appt_date)
    VALUES (24283, '11/03/98')
    GO

    下面是选择 appointments2 表中所有信息的查询:

    SELECT * 
    FROM appointments2
    ORDER BY doctor_id
    GO

    下面是结果集:

    patient_id doctor_id   appt_date                receptionist    
    ----------- ----------- ------------------------ --------------- 
    2000        151         Mar 4 1998 10:36AM       sa              
    2001        293        May 15 1998 12:00AM      sa              
    2003        21392       Mar 4 1998 10:36AM       sa              
    2004        24283       Nov 3 1998 12:00AM       sa              
    2002        27882       Jun 20 1998 12:00AM      sa              
     
    (5 row(s) affected)

    34@@TRANCOUNT

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

    语法

    @@TRANCOUNT

    返回类型

    integer

    注释

    BEGIN TRANSACTION 语句使 @@TRANCOUNT 递增 1。ROLLBACK TRANSACTION 将 @@TRANCOUNT 递减为 0,但 ROLLBACK TRANSACTION savepoint_name 语句并不影响 @@TRANCOUNT 值。COMMIT TRANSACTION 或 COMMIT WORK 将 @@TRANCOUNT 递减 1。

    示例

    下面的示例用 @@TRANCOUNT 测试应该提交的打开事务。

    BEGIN TRANSACTION
    UPDATE authors SET au_lname = upper(au_lname)
    WHERE au_lname = 'White'
    IF @@ROWCOUNT = 2
       COMMIT TRAN
     
    IF @@TRANCOUNT > 0
    BEGIN
       PRINT 'A transaction needs to be rolled back'
       ROLLBACK TRAN
    END

     

    35USER_NAME

    返回给定标识号的用户数据库用户名。

    语法

    USER_NAME ( [ id ] )

    参数

    id

    用来返回用户名的标识号。id 的数据类型为 int。

    返回类型

    nvarchar(256)

    注释

    当省略 id 时,则假定为当前用户。必须加上圆括号。

    示例
    A. 使用 USER_NAME

    本示例返回用户编号为 13 的用户名。

    SELECT USER_NAME(13)
    GO
    B. 使用不带 ID 的 USER_NAME

    本示例在不指定 ID 的情况下查找当前用户的名称。

    SELECT user_name()
    GO

    下面是结果集(对于是 sysadmin 固定服务器角色成员的用户):

    ------------------------------ 
    dbo                            
     
    (1 row(s) affected)
    C. 在 WHERE 子句中使用 USER_NAME

    本示例在 sysusers 中找到一行,该行的名称等于将系统函数 USER_NAME 应用于用户标识号 1 的结果。

    SELECT name
    FROM sysusers
    WHERE name = USER_NAME(1)
    GO

    下面是结果集:

    name                           
    ------------------------------ 
    dbo                            
     
    (1 row(s) affected)

     

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    安装图形化界面
    cemtos安装python
    traceback说明
    python常用魔法函数
    python上传文件接口
    文件上传接口
    MongoDB安装与使用
    解决macOS系统向有跳板机的服务器传文件
    mac终端命令sftp
    linux下mysql服务安装
  • 原文地址:https://www.cnblogs.com/Athrun/p/556669.html
Copyright © 2011-2022 走看看