zoukankan      html  css  js  c++  java
  • Sql Server 2005开发新特性笔记

         虽然项目中使用的数据库是SQL2005,但对于Sql2005的新特性还不是很了解。这段时间学习了一下关于Sql2005的新特性,先分享出来:

      一、更强的编程能力-----CLR集成 

    数据库编程人员现在可以充分利用.Net Framework类库和现代编程语言来开发数据库应用.

    通过集成的CLR,你可以用VB.NetC#来编写存储过程、函数和触发器.

    许多之前我们用T-SQL难以实现的任务现在可以更容易的用托管代码实现。

    系统还新增了两个数据库对象类型:聚合和用户自定义类型。

    数据库开发被集成到Visual Studio 2005开发环境中.

    CLR集成提供了将逻辑从其他层移动到数据库层的选择。 

    CLR集成执行的SQL Server功能的步骤:

    1.       开发人员将托管程序编写为一组类的定义。将你要在Sql Server内用作存储过程、函数或触发器等的代码编写为类的Static方法(如果你要创建用户定义的类型和聚合,可把代码编写为一个类class)。编译改程序并创建一个程序集。

    2.       将此程序集上载到SQL Server数据库,使用Create Assembly数据定义(DDL)转载程序集,这样便在数据库中注册了它。

    3.       创建Transact-SQL对象,例如,函数、过程和触发器、类型和聚合,并将它绑定到已经上载的程序集中的入口点(对函数、过程和触发器来说是方法,对类型和聚合来说是类)

    4.       利用VS.Net 2005提供的部署的功能,可以完成在前面提到的Create Assembly或创建T-SQL对象,VS.net2005这个产品吧通用性操作,做成了集成。

    二、XML技术-----Native XML support(open XML和aoto XML)

    三、Service Broker

    四、Web Services

    创建一个Function

    create function  counttable() returns int
     
    as
    begin 
    return 
    (
    select count(*as 'total' from XmlTable
    )
    End

    创建一个EndPoint对象

    create endpoint CharlesWebService
    state
    =started
    as HTTP
    (
    SITE
    ='localhost',
    PATH
    ='/CharlesWebService',
    --Authentication=(integrated),
    --
    PORTS=8685
    authentication=(integrated),
    ports
    =(Clear),
    Clear_Port
    =8080
    )    
    for SOAP
    (
        WebMethod 
    'GetCount'
        (
            name
    ='CharlesTest.dbo.counttable',
            
    schema=standard
        ),
        wsdl
    =default,
        batches
    =enabled,
        
    database='CharlesTest'
    )

    这样http://localhost:8080/CharlesWebService?wsdl 就是在本地的8080端口上注册了一个Web Service,而且并不需要IIS的支持,可以通过Web 引用添加到项目中使用。

    如果要删除这个Web Service 则用

    drop endpoint CharlesWebService

    五、T-SQL的增强

    1.New Relational Operators

    PIVOT例子

    (PIVOT和ON PIVOT主要用于分析二维表格,可以把行转换成列,列转换成行)

    select * from CarSales
    PIVOT(
    SUM(Sales) FOR Year IN([1990],[1991])) t
     

    2.Common Table Expressions

    创建一个表:

    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Employee]'AND type in (N'U'))
    BEGIN
    CREATE TABLE [dbo].[Employee](
        
    [empid] [int] NOT NULL,
        
    [empname] [nvarchar](50NULL,
        
    [mgrid] [int] NULL,
     
    CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED 
    (
        
    [empid] ASC
    )
    WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
    ON [PRIMARY]
    END

    插入的数据为:

    1 newegg NULL
    2 CBD 1
    3 A 2
    4 B 2
    5 C 2
    6 D 2
    7 E 2
    8 F 2
    9 BB 4
    10 FF 8

    现在我们需要查找CBD下所有的人员信息。(包括CBD),那么我们可以用如下的语句来实现:

    递归调用
    with EmpCTE(empid,empname,mgrid)
    AS
    (
        (
    select empid,empname,mgrid
        
    from Employee
        
    where empid=2)

        
    union all

        (
    select E.empid,E.empname,E.mgrid
        
    from Employee as E
        
    join EmpCTE as M
        
    on E.mgrid=M.empid )
    )
    select * from EmpCTE

    最后的效果为:

                        
    2 CBD 1
    3 A 2
    4 B 2
    5 C 2
    6 D 2
    7 E 2
    8 F 2
    9 BB 4

    总结:SQL2005还有很多新的特性,而且这里只是说了在开发方面的几个比较重要的特性,还有其他特性需要进一步的学习。
  • 相关阅读:
    P2525 Uim的情人节礼物·其之壱
    prev_permutation()
    P1634 禽兽的传染病
    P1615 西游记公司
    P1888 三角函数
    __gcd()函数
    P4325
    unique函数
    vscode C++开发环境配置教程(教你如何用vscode写C++)
    codeforces-C. News Distribution-2019.5.15
  • 原文地址:https://www.cnblogs.com/Charles2008/p/1382204.html
Copyright © 2011-2022 走看看