这问题今天纠结了我一天了。
      
    
    
      
        下面的代码是网上转载来的
      
    
    
      
        create
      
       partition 
      
        function
      
       PF_Orders_OrderDateRange(
      
        datetime
      
      )
      
      
        as
      
      
      range 
      
        right
      
      
        for
      
      
        values
      
       (
      
      
        '
      
      
        1997-01-01
      
      
        '
      
      ,
      
      
        '
      
      
        1998-01-01
      
      
        '
      
      ,
      
      
        '
      
      
        1999-01-01
      
      
        '
      
      
      )
      
      
        go
      
      
      
        --
      
      
         创建分区方案
      
      
        
      
      
        create
      
       partition scheme PS_Orders
      
      
        as
      
      
      partition PF_Orders_OrderDateRange
      
      
        to
      
       (
      
        [
      
      
        primary
      
      
        ]
      
      , 
      
        [
      
      
        primary
      
      
        ]
      
      , 
      
        [
      
      
        primary
      
      
        ]
      
      , 
      
        [
      
      
        primary
      
      
        ]
      
      )
      
      
        go
      
      
      
        --
      
      
         创建分区表
      
      
        
      
      sp_rename 
      
        '
      
      
        dbo.Orders
      
      
        '
      
      ,
      
        '
      
      
        Orders_From_SQL2000_Northwind
      
      
        '
      
      
      
      
        create
      
      
        table
      
       dbo.Orders
      
      (
      
       OrderID 
      
        int
      
      
        not
      
      
        null
      
      
       ,CustomerID 
      
        varchar
      
      (
      
        10
      
      ) 
      
        not
      
      
        null
      
      
       ,EmployeeID 
      
        int
      
      
        not
      
      
        null
      
      
       ,OrderDate 
      
        datetime
      
      
        not
      
      
        null
      
      
      )
      
      
        on
      
       PS_Orders(OrderDate)
      
      
        go
      
      
      
        --
      
      
         创建聚集分区索引
      
      
        
      
      
        create
      
      
        clustered
      
      
        index
      
       IXC_Orders_OrderDate 
      
        on
      
       dbo.Orders(OrderDate)
      
      
        go
      
      
      
        --
      
      
         为分区表设置主键
      
      
        
      
      
        alter
      
      
        table
      
       dbo.Orders 
      
        add
      
      
        constraint
      
       PK_Orders 
      
      
        primary
      
      
        key
      
       (OrderID, CustomerID, OrderDate)
      
      
        go
      
      
      
        --
      
      
         导入数据到分区表
      
      
        
      
      
        insert
      
      
        into
      
       dbo.Orders
      
      
        select
      
       OrderID, CustomerID, EmployeeID, OrderDate
      
      
        from
      
       dbo.Orders_From_SQL2000_Northwind 
      
        --
      
      
        (注:数据来源于 SQL Server 2000 示例数据库)
      
      
        
      
      
        go
      
      
      
        --
      
      
         查看分区表每个分区的数据分布情况
      
      
        
      
      
        select
      
       partition 
      
        =
      
       $partition.PF_Orders_OrderDateRange(OrderDate)
      
       ,rows 
      
        =
      
      
        count
      
      (
      
        *
      
      )
      
       ,minval 
      
        =
      
      
        min
      
      (OrderDate)
      
       ,maxval 
      
        =
      
      
        max
      
      (OrderDate)
      
      
        from
      
       dbo.Orders
      
      
        group
      
      
        by
      
       $partition.PF_Orders_OrderDateRange(OrderDate)
      
      
        order
      
      
        by
      
       partition
      
      
        GO
      
      
      
      
        create
      
      
        table
      
       dbo.Orders_1998
      
      (
      
       OrderID 
      
        int
      
      
        not
      
      
        null
      
      
       ,CustomerID 
      
        varchar
      
      (
      
        10
      
      ) 
      
        not
      
      
        null
      
      
       ,EmployeeID 
      
        int
      
      
        not
      
      
        null
      
      
       ,OrderDate 
      
        datetime
      
      
        not
      
      
        null
      
      
      ) 
      
        on
      
      
        [
      
      
        primary
      
      
        ]
      
      
      
        go
      
      
      
        create
      
      
        clustered
      
      
        index
      
       IXC_Orders1998_OrderDate 
      
        on
      
       dbo.Orders_1998(OrderDate)
      
      
        go
      
      
      
        alter
      
      
        table
      
       dbo.Orders_1998 
      
        add
      
      
        constraint
      
       PK_Orders_1998
      
      
        primary
      
      
        key
      
      
        nonclustered
      
       (OrderID, CustomerID, OrderDate)
      
      
        go
      
      
      
        alter
      
      
        table
      
       dbo.Orders switch partition 
      
        3
      
      
        to
      
       dbo.Orders_1998
      
      
        go
      
      
      
        alter
      
      
        table
      
       dbo.Orders_1998 
      
        add
      
      
        constraint
      
       CK_Orders1998_OrderDate
      
      
        check
      
       (OrderDate
      
        >=
      
      
        '
      
      
        1998-01-01
      
      
        '
      
      
        and
      
       OrderDate
      
        <
      
      
        '
      
      
        1999-01-01
      
      
        '
      
      )
      
      
        go
      
      
      
        alter
      
      
        table
      
       dbo.Orders_1998 switch 
      
        to
      
       dbo.Orders partition 
      
        3
      
    
  这段代码是没问题的,普通表能成功的switch 分区表。但是有一点要注意:分区字段为 not null。如果你改为null 不好意思 switch 不了。
只能出不能进。

