ALTER TABLE sửa đổi định nghĩa bảng bằng cách thay đổi, thêm hoặc bớt các cột và ràng buộc. ALTER TABLE cũng chỉ định lại và xây dựng lại các phân vùng hoặc tắt và bật các ràng buộc và trình kích hoạt.

Bạn đang xem : thay đổi cột thả bảng trong máy chủ sql

ALTER TABLE (Transact-SQL)

Trong bài viết này

Áp dụng cho: SQL Server (tất cả các phiên bản được hỗ trợ) Cơ sở dữ liệu Azure SQL Azure SQL Managed Instance Azure Synapse Analytics Hệ thống phân tích nền tảng (PDW)

Sửa đổi định nghĩa bảng bằng cách thay đổi, thêm hoặc bớt các cột và ràng buộc. ALTER TABLE cũng chỉ định lại và xây dựng lại các phân vùng hoặc tắt và bật các ràng buộc và trình kích hoạt.

Quan trọng

Cú pháp cho ALTER TABLE khác nhau đối với bảng dựa trên đĩa và bảng được tối ưu hóa bộ nhớ. Sử dụng các liên kết sau để đưa bạn trực tiếp đến khối cú pháp thích hợp cho các loại bảng của bạn và đến các ví dụ cú pháp thích hợp:

  • Bảng dựa trên đĩa:

    • Cú pháp
    • Ví dụ
  • Các bảng được tối ưu hóa bộ nhớ

    • Cú pháp
    • Ví dụ

Để biết thêm thông tin về các quy ước cú pháp, hãy xem Quy ước về cú pháp Transact-SQL .

Cú pháp cho bảng dựa trên đĩa

 BẢNG ALTER {database_name.schema_name.table_name | schema_name.table_name | table_name}
{
    ALTER COLUMN column_name
    {
        [type_schema_name. ] tên loại
            [(
                {
                   độ chính xác [, tỷ lệ]
                 | tối đa
                 | xml_schema_collection
                }
            )]
        [COLLATE collation_name]
        [NULL | KHÔNG ĐỦ] [SPARSE]
      | {THÊM | LÀM RƠI }
          {ROWGUIDCOL | ĐÃ ĐĂNG KÝ | KHÔNG ĐỂ THAY THẾ | SPARSE | ẨN GIẤU }
      | {THÊM | DROP} MASKED [VỚI (FUNCTION = 'mask_ Chức năng')]
    }
    [VỚI (ONLINE = ON | OFF)]
    | [VỚI {KIỂM TRA | KHÔNG KIỂM TRA } ]
  
    | CỘNG
    {
        & lt; column_definition & gt;
      | & lt; computed_column_definition & gt;
      | & lt; table_constraint & gt;
      | & lt; column_set_definition & gt;
    } [ ,...N ]
      | [system_start_time_column_name datetime2 ĐƯỢC TẠO LUÔN KHI ROW BẮT ĐẦU
                [HIDDEN] [NOT NULL] [CONSTRAINT binding_name]
            DEFAULT const_expression [CÓ GIÁ TRỊ],
                system_end_time_column_name datetime2 ĐƯỢC PHÁT SINH LUÔN LÀ ROW END
                   [HIDDEN] [NOT NULL] [CONSTRAINT binding_name]
            DEFAULT const_expression [CÓ GIÁ TRỊ],
                start_transaction_id_column_name bigint ĐƯỢC TẠO LUÔN NHƯ TRANSACTION_ID BẮT ĐẦU
                   [HIDDEN] NOT NULL [CONSTRAINT binding_name]
            DEFAULT const_expression [CÓ GIÁ TRỊ],
  end_transaction_id_column_name bigint ĐƯỢC TẠO LUÔN NHƯ TRANSACTION_ID HẾT
                   [HIDDEN] NULL [CONSTRAINT binding_name]
            DEFAULT const_expression [CÓ GIÁ TRỊ],
  start_sequence_number_column_name bigint ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER BẮT ĐẦU
                   [HIDDEN] NOT NULL [CONSTRAINT binding_name]
            DEFAULT const_expression [CÓ GIÁ TRỊ],
  end_sequence_number_column_name bigint ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER HẾT
                   [HIDDEN] NULL [CONSTRAINT binding_name]
            DEFAULT hằng_số_thể_lượng [CÓ GIÁ TRỊ]
        ]
       PERIOD FOR SYSTEM_TIME (system_start_time_column_name, system_end_time_column_name)
    | LÀM RƠI
     [{
         [CONSTRAINT] [NẾU TỒN TẠI]
         {
              tên_mạch
              [ VỚI
               (& lt; drop_clustered_constraint_option & gt; [, ... n])
              ]
          } [ ,...N ]
          | COLUMN [NẾU TỒN TẠI]
          {
              tên cột dọc
          } [ ,...N ]
          | PERIOD FOR SYSTEM_TIME
     } [ ,...N ]
    | [VỚI {KIỂM TRA | KIỂM TRA}] {KIỂM TRA | NOCHECK} CONSTRAINT
        {TẤT CẢ | tên_kèm [, ... n]}
  
    | {BẬT | DISABLE} TRIGGER
        {TẤT CẢ | trigger_name [, ... n]}
  
    | {BẬT | DISABLE} CHANGE_TRACKING
        [VỚI (TRACK_COLUMNS_UPDATED = {BẬT | TẮT})]
  
    | CHUYỂN ĐỔI [PARTITION source_partition_number_expression]
        ĐẾN target_table
        [PARTITION target_partition_number_expression]
        [VỚI (& lt; low_priasty_lock_wait & gt;)]

    | BỘ
        (
            [FILESTREAM_ON =
                {partition_scheme_name | nhóm tập tin | "mặc định" | "VÔ GIÁ TRỊ" } ]
            | SYSTEM_VERSIONING =
                  {
                    TẮT
                  | TRÊN
                      [(HISTORY_TABLE = schema_name. History_table_name
                          [, DATA_CONSISTENCY_CHECK = {BẬT | TẮT } ]
                          [, HISTORY_RETENTION_PERIOD =
                          {
                              INFINITE | số {NGÀY | NGÀY | TUẦN LỄ | TUẦN
                  | THÁNG NĂM | THÁNG NĂM | NĂM | NĂM}
                          }
                          ]
                        )
                      ]
                  }
            | DATA_DELETION =
                {
                      TẮT
                    | TRÊN
                        [([FILTER_COLUMN = column_name]
                            [, RETENTION_PERIOD = {INFINITE | số {NGÀY | NGÀY | TUẦN LỄ | TUẦN
                                    | THÁNG NĂM | THÁNG NĂM | NĂM | NĂM}}]
                        )]
                    }
    | XÂY DỰNG lại
      [[PARTITION = ALL]
        [VỚI (& lt; build_option & gt; [, ... n])]
      | [PARTITION = partition_number
           [VỚI (& lt; single_partition_rebuild_option & gt; [, ... n])]
        ]
      ]
  
    | & lt; table_option & gt;
    | & lt; filetable_option & gt;
    | & lt; Stret_configuration & gt;
}
[; ]
  
- Tùy chọn ALTER TABLE
  
& lt; column_set_definition & gt; :: =
    column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS

& lt; drop_clustered_constraint_option & gt; :: =
    {
        MAXDOP = max_degree_of_parallelism
      | TRỰC TUYẾN = {BẬT | TẮT }
      | CHUYỂN TỚI
         {partition_scheme_name (column_name) | nhóm tập tin | "mặc định" }
    }
& lt; table_option & gt; :: =
    {
        SET (LOCK_ESCALATION = {AUTO | TABLE | DISABLE})
    }& lt; filetable_option & gt; :: =
    {
       [{BẬT | DISABLE} FILETABLE_NAMESPACE]
       [SET (FILETABLE_DIRECTORY = directory_name)]
    }
  
& lt; Stret_configuration & gt; :: =
    {
      BỘ (
        REMOTE_DATA_ARCHIVE
        {
            = BẬT (& lt; table_stretch_options & gt;)
          | = OFF_WITHOUT_DATA_RECOVERY (MIGRATION_STATE = PAUSED)
          | (& lt; table_stretch_options & gt; [, ... n])
        }
            )
    }
  
& lt; table_stretch_options & gt; :: =
    {
     [FILTER_PREDICATE = {null | table_predicate_ Chức năng},]
       MIGRATION_STATE = {OUTBOUND | LIÊN HỆ | ĐÃ TẠM DỪNG}
    }
  
& lt; single_partition_rebuild__option & gt; :: =
{
      SORT_IN_TEMPDB = {BẬT | TẮT }
    | MAXDOP = max_degree_of_parallelism
    | DATA_COMPRESSION = {KHÔNG CÓ | ROW | TRANG | COLUMNSTORE | COLUMNSTORE_ARCHIVE}}
    | ONLINE = {ON [(& lt; low_priasty_lock_wait & gt;)] | TẮT }
}
  
& lt; low_priasty_lock_wait & gt; :: =
{
    WAIT_AT_LOW_PRIORITY (MAX_DURATION = & lt; thời gian & gt; [MINUTES],
        ABORT_AFTER_WAIT = {KHÔNG CÓ | TỰ TIN | BLOCKERS})
}
 

Cú pháp cho các bảng được tối ưu hóa bộ nhớ

  BẢNG ALTER {database_name.schema_name.table_name | schema_name.table_name | table_name}
{
    ALTER COLUMN column_name
    {
        [type_schema_name. ] tên loại
            [(
                {
                   độ chính xác [, tỷ lệ]
                }
            )]
        [COLLATE collation_name]
        [NULL | CÓ GIÁ TRỊ ]
    }

    | ALTER INDEX index_name
    {
        [type_schema_name. ] tên loại
        XÂY DỰNG lại
        [[KHÔNG CHỈNH SỬA] VỚI (BUCKET_COUNT = bucket_count)
        ]
    }

    | CỘNG
    {
        & lt; column_definition & gt;
      | & lt; computed_column_definition & gt;
      | & lt; table_constraint & gt;
      | & lt; table_index & gt;
      | & lt; column_index & gt;
    } [ ,...N ]
  
    | LÀM RƠI
     [{
         CONSTRAINT [NẾU TỒN TẠI]
         {
              tên_mạch
          } [ ,...N ]
        | INDEX [NẾU TỒN TẠI]
      {
         index_name
       } [ ,...N ]
          | COLUMN [NẾU TỒN TẠI]
          {
              tên cột dọc
          } [ ,...N ]
          | PERIOD FOR SYSTEM_TIME
     } [ ,...N ]
    | [VỚI {KIỂM TRA | KIỂM TRA}] {KIỂM TRA | NOCHECK} CONSTRAINT
        {TẤT CẢ | tên_kèm [, ... n]}

    | {BẬT | DISABLE} TRIGGER
        {TẤT CẢ | trigger_name [, ... n]}
  
    | CHUYỂN ĐỔI [[PARTITION] source_partition_number_expression]
        ĐẾN target_table
        [PARTITION target_partition_number_expression]
        [VỚI (& lt; low_priasty_lock_wait & gt;)]
    
}
[; ]

- Tùy chọn ALTER TABLE

& lt; table_constraint & gt; :: =
 [CONSTRAINT binding_name]
{
   {CHÌA KHÓA CHÍNH | ĐỘC NHẤT }
     {
       KHÔNG ĐƯỢC ĐIỀU CHỈNH (cột [ASC | DESC] [, ... n])
       | KHÔNG ĐIỀU CHỈNH HASH (cột [, ... n]) VỚI (BUCKET_COUNT = bucket_count)
     }
    | TỪ KHÓA NGOẠI TỆ
        (cột [, ... n])
        REFERENCES tên_tên_bảng_tham chiếu [(ref_column [, ... n])]
    | KIỂM TRA (biểu_thức lôgic)
}

& lt; column_index & gt; :: =
  INDEX index_name
{[KHÔNG ĐƯỢC ĐIỀU CHỈNH] | [KHÔNG CHỈNH SỬA] HASH VỚI (BUCKET_COUNT = bucket_count)}

& lt; table_index & gt; :: =
  INDEX index_name
{[NONCLUSTERED] HASH (cột [, ... n]) VỚI (BUCKET_COUNT = bucket_count)
  | [KHÔNG ĐIỀU CHỈNH] (cột [ASC | DESC] [, ... n])
      [BẬT tên_nhóm_tệp | mặc định ]
  | CLUSTERED COLUMNSTORE [WITH (COMPRESSION_DELAY = {0 | delay [Minutes]})]
      [BẬT tên_nhóm_tệp | mặc định ]
}
 

Cú pháp cho Azure Synapse Analytics và Kho dữ liệu song song

 - Cú pháp cho Azure Synapse Analytics và Kho dữ liệu song song

ALTER TABLE {database_name.schema_name.source_table_name | schema_name.source_table_name | source_table_name}
{
    ALTER COLUMN column_name
        {
            type_name [(precision [, scale])]
            [COLLATE Windows_collation_name]
            [NULL | CÓ GIÁ TRỊ ]
        }
    | THÊM {& lt; column_definition & gt; | & lt; column_constraint & gt; FOR column_name} [, ... n]
    | DROP {COLUMN column_name | [CONSTRAINT] binding_name} [, ... n]
    | XÂY DỰNG lại {
            [PARTITION = TẤT CẢ [VỚI (& lt; build_option & gt;)]]
          | [PARTITION = partition_number [WITH (& lt; single_partition_rebuild_option & gt;]]
      }
    | {SPLIT | MERGE} RANGE (giá trị ranh giới)
    | CHUYỂN ĐỔI [PARTITION source_partition_number
        ĐẾN target_table_name [PARTITION target_partition_number] [VỚI (TRUNCATE_TARGET = BẬT | TẮT)
}
[;]

& lt; column_definition & gt; :: =
{
    tên cột dọc
    type_name [(precision [, scale])]
    [& lt; column_constraint & gt; ]
    [COLLATE Windows_collation_name]
    [NULL | CÓ GIÁ TRỊ ]
}

& lt; column_constraint & gt; :: =
    [CONSTRAINT binding_name]
    {
        DEFAULT hằng_số_thể_lượng
        | TỪ KHÓA CHÍNH KHÔNG ĐƯỢC ĐIỀU CHỈNH (column_name [, ... n]) KHÔNG ĐƯỢC THỰC HIỆN - Chỉ áp dụng cho Azure Synapse Analytics
        | DUY NHẤT (column_name [, ... n]) KHÔNG ĐƯỢC THỰC HIỆN - Chỉ áp dụng cho Azure Synapse Analytics
    }
& lt; xây dựng lại_option & gt; :: =
{
    DATA_COMPRESSION = {COLUMNSTORE | COLUMNSTORE_ARCHIVE}
        [TRÊN CÁC PHẦN ({& lt; partition_number & gt; [TO & lt; partition_number & gt;]} [, ... n])]
    | XML_COMPRESSION = {BẬT | TẮT }
        [TRÊN CÁC PHẦN ({& lt; partition_number & gt; [TO & lt; partition_number & gt;]} [, ... n])]
}

& lt; single_partition_rebuild_option & gt; :: =
{
    DATA_COMPRESSION = {COLUMNSTORE | COLUMNSTORE_ARCHIVE}
}
 

Lưu ý

Nhóm SQL không máy chủ trong Azure Synapse Analytics chỉ hỗ trợ các bảng bên ngoài tạm thời .

Lưu ý

Để xem cú pháp Transact-SQL cho SQL Server 2014 trở về trước, hãy xem Tài liệu về các phiên bản trước .

Đối số

database_name

Tên của cơ sở dữ liệu mà bảng đã được tạo.

schema_name

Tên của lược đồ chứa bảng.

table_name

Tên của bảng sẽ được thay đổi. Nếu bảng không có trong cơ sở dữ liệu hiện tại hoặc được chứa bởi lược đồ do người dùng hiện tại sở hữu, bạn phải chỉ định rõ ràng cơ sở dữ liệu và lược đồ.

ALTER COLUMN

Chỉ định rằng cột được đặt tên sẽ được thay đổi hoặc thay đổi.

Cột đã sửa đổi không được là:

  • Một cột có kiểu dữ liệu dấu thời gian .

  • ROWGUIDCOL cho bảng.

  • Một cột được tính toán hoặc được sử dụng trong một cột được tính toán.

  • Được sử dụng trong các thống kê được tạo bởi câu lệnh CREATE STATISTICS. Người dùng cần chạy DROP STATISTICS để giảm số liệu thống kê trước khi ALTER COLUMN có thể thành công. Chạy truy vấn này để nhận tất cả các cột thống kê và thống kê do người dùng tạo cho một bảng.

      CHỌN s.name AS Statistics_name
           , c.name AS column_name
           , sc.stats_column_id
    TỪ sys.stats AS s
    INNER THAM GIA sys.stats_columns AS sc
         BẬT s.object_id = sc.object_id VÀ s.stats_id = sc.stats_id
    INNER THAM GIA sys.columns NHƯ c
         BẬT sc.object_id = c.object_id VÀ c.column_id = sc.column_id
    WHERE s.object_id = OBJECT_ID ('& lt; table_name & gt;');
     

    Lưu ý

    Thống kê được tạo tự động bởi trình tối ưu hóa truy vấn sẽ tự động bị ALTER COLUMN loại bỏ.

  • Được sử dụng trong ràng buộc PRIMARY KEY hoặc [FOREIGN KEY] TÀI LIỆU THAM KHẢO.

  • Được sử dụng trong ràng buộc KIỂM TRA hoặc DUY NHẤT. Tuy nhiên, cho phép thay đổi độ dài của cột có độ dài thay đổi được sử dụng trong ràng buộc CHECK hoặc UNIQUE.

  • Được kết hợp với một định nghĩa mặc định. Tuy nhiên, độ dài, độ chính xác hoặc tỷ lệ của cột có thể thay đổi nếu không thay đổi loại dữ liệu.

Chỉ có thể thay đổi loại dữ liệu của các cột text , ntext image theo những cách sau:

  • text thành varchar (max) , nvarchar (max) hoặc xml
  • ntext thành varchar (max) , nvarchar (max) hoặc xml
  • image thành varbinary (max)

Một số thay đổi về kiểu dữ liệu có thể gây ra thay đổi trong dữ liệu. Ví dụ: thay đổi cột nchar hoặc nvarchar thành char hoặc varchar , có thể gây ra chuyển đổi các ký tự mở rộng . Để biết thêm thông tin, hãy xem ĐÚC và CHUYỂN ĐỔI. Giảm độ chính xác hoặc tỷ lệ của một cột có thể khiến dữ liệu bị cắt ngắn.

Lưu ý

Không thể thay đổi kiểu dữ liệu của một cột trong bảng đã phân vùng.

Không thể thay đổi kiểu dữ liệu của các cột có trong chỉ mục trừ khi cột đó là dữ liệu varchar , nvarchar hoặc varbinary và kích thước mới bằng hoặc lớn hơn kích thước cũ.

Không thể thay đổi cột được bao gồm trong ràng buộc khóa chính, từ NOT NULL thành NULL .

Khi sử dụng Luôn được mã hóa (không có mã hóa an toàn), nếu cột đang được sửa đổi được mã hóa bằng ‘ENCRYPTED WITH’, bạn có thể thay đổi kiểu dữ liệu thành kiểu dữ liệu tương thích (chẳng hạn như INT thành BIGINT), nhưng bạn không thể thay đổi bất kỳ cài đặt mã hóa.

Khi sử dụng Luôn được mã hóa bằng các vùng mã hóa an toàn, bạn có thể thay đổi bất kỳ cài đặt mã hóa nào, nếu khóa mã hóa cột bảo vệ cột (và khóa mã hóa cột mới, nếu bạn đang thay đổi khóa) hỗ trợ tính toán mã hóa (được mã hóa bằng mã hóa- đã bật khóa chính của cột). Để biết thông tin chi tiết, hãy xem phần Luôn được mã hóa bằng các vùng bảo mật .

column_name

Tên của cột sẽ được thay đổi, thêm hoặc bớt. Tên_cổng_tối tối đa là 128 ký tự. Đối với các cột mới, bạn có thể bỏ qua column_name cho các cột được tạo bằng kiểu dữ liệu dấu thời gian . Tên dấu thời gian được sử dụng nếu bạn không chỉ định column_name cho cột kiểu dữ liệu dấu thời gian .

Lưu ý

Các cột mới được thêm vào sau khi tất cả các cột hiện có trong bảng được thay đổi.

[type_schema_name . ] type_name

Kiểu dữ liệu mới cho cột đã thay đổi hoặc kiểu dữ liệu cho cột đã thêm. Bạn không thể chỉ định type_name cho các cột hiện có của bảng được phân vùng. type_name có thể là một trong các kiểu sau:

  • Kiểu dữ liệu hệ thống SQL Server.
  • Kiểu dữ liệu bí danh dựa trên kiểu dữ liệu hệ thống SQL Server. Bạn tạo các kiểu dữ liệu bí danh bằng câu lệnh CREATE TYPE trước khi chúng có thể được sử dụng trong định nghĩa bảng.
  • Một kiểu .NET Framework do người dùng xác định và lược đồ chứa nó. Bạn tạo các kiểu do người dùng xác định bằng câu lệnh CREATE TYPE trước khi chúng có thể được sử dụng trong định nghĩa bảng.

Sau đây là tiêu chí cho type_name của một cột đã thay đổi:

  • Kiểu dữ liệu trước đó phải được chuyển đổi hoàn toàn sang kiểu dữ liệu mới.
  • type_name không được là dấu thời gian .
  • Các mặc định ANSI_NULL luôn được bật cho ALTER COLUMN; nếu không được chỉ định, cột sẽ không có giá trị.
  • Phần đệm ANSI_PADDING luôn BẬT cho ALTER COLUMN.
  • Nếu cột đã sửa đổi là cột nhận dạng thì new_data_type phải là kiểu dữ liệu hỗ trợ thuộc tính nhận dạng.
  • Cài đặt hiện tại cho SET ARITHABORT bị bỏ qua. ALTER TABLE hoạt động như thể ARITHABORT được đặt thành BẬT.

Lưu ý

Nếu mệnh đề COLLATE không được chỉ định, việc thay đổi kiểu dữ liệu của cột sẽ gây ra thay đổi đối chiếu đối với đối chiếu mặc định của cơ sở dữ liệu.

precision

Độ chính xác cho kiểu dữ liệu được chỉ định. Để biết thêm thông tin về các giá trị chính xác hợp lệ, hãy xem Độ chính xác, Tỷ lệ và Chiều dài .

scale

Tỷ lệ cho kiểu dữ liệu được chỉ định. Để biết thêm thông tin về các giá trị tỷ lệ hợp lệ, hãy xem Độ chính xác, Tỷ lệ và Chiều dài .

max

Chỉ áp dụng cho các kiểu dữ liệu varchar , nvarchar varbinary để lưu trữ 2 ^ 31-1 byte ký tự, dữ liệu nhị phân, và dữ liệu Unicode.

xml_schema_collection

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ áp dụng cho kiểu dữ liệu xml để liên kết một lược đồ XML với kiểu này. Trước khi nhập cột xml vào bộ sưu tập giản đồ, trước tiên, bạn tạo tập hợp giản đồ trong cơ sở dữ liệu bằng cách sử dụng TẠO BỘ SƯU TẬP SCHEMA XML .

COLLATE & lt; collation_name & gt;

Chỉ định đối chiếu mới cho cột đã thay đổi. Nếu không được chỉ định, cột được chỉ định đối chiếu mặc định của cơ sở dữ liệu. Tên đối chiếu có thể là tên đối chiếu Windows hoặc tên đối chiếu SQL. Để biết danh sách và thêm thông tin, hãy xem Tên đối chiếu Windows Tên đối chiếu máy chủ SQL .

Mệnh đề COLLATE chỉ thay đổi đối chiếu của các cột char , varchar , nchar nvarchar Loại dữ liệu. Để thay đổi đối chiếu của cột kiểu dữ liệu bí danh do người dùng xác định, hãy sử dụng các câu lệnh ALTER TABLE riêng biệt để thay đổi cột thành kiểu dữ liệu hệ thống SQL Server. Sau đó, thay đổi đối chiếu của nó và thay đổi cột về kiểu dữ liệu bí danh.

ALTER COLUMN không thể thay đổi đối chiếu nếu tồn tại một hoặc nhiều điều kiện sau:

  • Nếu ràng buộc KIỂM TRA, ràng buộc NGOẠI KHÓA hoặc các cột được tính toán thì tham chiếu cột đó đã thay đổi.
  • Nếu bất kỳ chỉ mục, thống kê hoặc chỉ mục toàn văn nào được tạo trên cột. Thống kê được tạo tự động trên cột đã thay đổi sẽ bị loại bỏ nếu đối chiếu cột được thay đổi.
  • Nếu một chế độ xem liên kết giản đồ hoặc hàm tham chiếu đến cột.

Để biết thêm thông tin, hãy xem COLLATE .

NULL | KHÔNG ĐẦY ĐỦ

Chỉ định xem cột có thể chấp nhận các giá trị null hay không. Các cột không cho phép giá trị rỗng chỉ được thêm vào ALTER TABLE nếu chúng có chỉ định mặc định hoặc nếu bảng trống. Bạn chỉ có thể chỉ định NOT NULL cho các cột được tính nếu bạn cũng đã chỉ định PERSISTED. Nếu cột mới cho phép giá trị null và bạn không chỉ định giá trị mặc định, thì cột mới chứa giá trị null cho mỗi hàng trong bảng. Nếu cột mới cho phép giá trị rỗng và bạn thêm định nghĩa mặc định với cột mới, bạn có thể sử dụng VỚI GIÁ TRỊ để lưu trữ giá trị mặc định trong cột mới cho mỗi hàng hiện có trong bảng.

Nếu cột mới không cho phép giá trị rỗng và bảng không trống, bạn phải thêm định nghĩa DEFAULT với cột mới. Và, cột mới sẽ tự động tải với giá trị mặc định trong các cột mới trong mỗi hàng hiện có.

Bạn có thể chỉ định NULL trong ALTER COLUMN để buộc cột NOT NULL cho phép giá trị null, ngoại trừ các cột trong ràng buộc CHÍNH CHÍNH. Bạn chỉ có thể chỉ định NOT NULL trong ALTER COLUMN nếu cột không chứa giá trị rỗng. Các giá trị null phải được cập nhật thành một số giá trị trước khi cho phép ALTER COLUMN NOT NULL, ví dụ:

  CẬP NHẬT MyTable SET NullCol = N'some_value 'WHERE NullCol LÀ NULL;
ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR (20) KHÔNG ĐẦY ĐỦ;
 

Khi bạn tạo hoặc thay đổi bảng bằng câu lệnh CREATE TABLE hoặc ALTER TABLE, cơ sở dữ liệu và cài đặt phiên sẽ ảnh hưởng và có thể ghi đè khả năng vô hiệu của kiểu dữ liệu được sử dụng trong định nghĩa cột. Đảm bảo rằng bạn luôn xác định rõ ràng một cột là NULL hoặc NOT NULL cho các cột không được tính toán.

Nếu bạn thêm cột có kiểu dữ liệu do người dùng xác định, hãy đảm bảo xác định cột có cùng khả năng vô hiệu với kiểu dữ liệu do người dùng xác định. Và, chỉ định một giá trị mặc định cho cột. Để biết thêm thông tin, hãy xem TẠO BẢNG .

Lưu ý

Nếu NULL hoặc NOT NULL được chỉ định với ALTER COLUMN, thì new_data_type [(precision [, scale])] cũng phải được chỉ định. Nếu loại dữ liệu, độ chính xác và tỷ lệ không thay đổi, hãy chỉ định giá trị cột hiện tại.

[{ADD | DROP} ROWGUIDCOL]

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định rằng thuộc tính ROWGUIDCOL được thêm vào hoặc loại bỏ khỏi cột được chỉ định. ROWGUIDCOL chỉ ra rằng cột là một cột GUID hàng. Bạn chỉ có thể đặt một cột duy nhất trên mỗi bảng làm cột ROWGUIDCOL. Và, bạn chỉ có thể chỉ định thuộc tính ROWGUIDCOL cho cột uniqueidentifier . Bạn không thể chỉ định ROWGUIDCOL cho một cột thuộc loại dữ liệu do người dùng xác định.

ROWGUIDCOL không thực thi tính duy nhất của các giá trị được lưu trữ trong cột và không tự động tạo giá trị cho các hàng mới được chèn vào bảng. Để tạo các giá trị duy nhất cho mỗi cột, hãy sử dụng hàm NEWID hoặc NEWSEQUENTIALID trên các câu lệnh INSERT. Hoặc, chỉ định hàm NEWID hoặc NEWSEQUENTIALID làm mặc định cho cột.

[{ADD | DROP} PERSISTED]

Chỉ định rằng thuộc tính PERSISTED được thêm vào hoặc xóa khỏi cột đã chỉ định. Cột phải là một cột được tính toán được xác định bằng biểu thức xác định. Đối với các cột được chỉ định là PERSISTED, Công cụ cơ sở dữ liệu lưu trữ vật lý các giá trị đã tính trong bảng và cập nhật các giá trị khi bất kỳ cột nào khác mà cột được tính phụ thuộc được cập nhật. Bằng cách đánh dấu cột được tính là ĐÃ CÓ, bạn có thể tạo chỉ mục trên các cột được tính được xác định trên các biểu thức có tính xác định, nhưng không chính xác. Để biết thêm thông tin, hãy xem Chỉ mục trên các cột được tính toán .

Bất kỳ cột nào được tính toán nào được sử dụng làm cột phân vùng của bảng được phân vùng đều phải được đánh dấu rõ ràng là ĐÃ CÓ.

KHÔNG ĐỂ THAY THẾ

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định rằng các giá trị được tăng lên trong các cột nhận dạng khi các tác nhân nhân bản thực hiện các hoạt động chèn. Bạn chỉ có thể chỉ định mệnh đề này nếu column_name là một cột nhận dạng.

SPARSE

Cho biết cột này là một cột thưa thớt. Việc lưu trữ các cột thưa thớt được tối ưu hóa cho các giá trị rỗng. Bạn không thể đặt các cột thưa thớt là NOT NULL. Chuyển đổi một cột từ thưa thớt thành không phân tích hoặc từ không phân tích thành phân tích, khóa bảng trong suốt thời gian thực thi lệnh. Bạn có thể cần sử dụng điều khoản REBUILD để lấy lại bất kỳ khoản tiết kiệm không gian nào. Để biết thêm các hạn chế và biết thêm thông tin về các cột thưa thớt, hãy xem Sử dụng các cột thưa thớt .

THÊM MẶT NẠ VỚI (FUNCTION = ‘mask_osystem’)

Áp dụng cho : SQL Server (SQL Server 2016 (13.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định một mặt nạ dữ liệu động. mask_ function là tên của hàm che với các tham số thích hợp. Ba chức năng có sẵn:

  • default ()
  • email ()
  • một phần ()
  • ngẫu nhiên ()

Yêu cầu quyền ALTER BẤT KỲ MẶT NẠ.

Để thả mặt nạ, hãy sử dụng DROP MASKED . Để biết các thông số chức năng, hãy xem Mặt nạ dữ liệu động .

Thêm và thả mặt nạ yêu cầu quyền ALTER ANY MASK .

WITH (ONLINE = ON | OFF) & lt; như áp dụng cho việc thay đổi một cột & gt;

Áp dụng cho : SQL Server (SQL Server 2016 (13.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Cho phép thực hiện nhiều tác vụ cột thay đổi trong khi bảng vẫn có sẵn. Mặc định là TẮT. Bạn có thể chạy trực tuyến cột thay đổi để biết các thay đổi cột liên quan đến loại dữ liệu, độ dài hoặc độ chính xác của cột, tính không có giá trị, độ thưa thớt và đối chiếu.

Cột thay đổi trực tuyến cho phép người dùng tạo và thống kê tự động tham chiếu cột đã thay đổi trong suốt thời gian hoạt động ALTER COLUMN, cho phép các truy vấn chạy như bình thường. Khi kết thúc hoạt động, số liệu thống kê tự động tham chiếu đến cột sẽ bị xóa và số liệu thống kê do người dùng tạo không còn hiệu lực. Người dùng phải cập nhật thủ công số liệu thống kê do người dùng tạo sau khi hoàn thành thao tác. Nếu cột này là một phần của biểu thức lọc cho bất kỳ thống kê hoặc chỉ mục nào thì bạn không thể thực hiện thao tác thay đổi cột.

  • Trong khi thao tác cột thay đổi trực tuyến đang chạy, tất cả các thao tác có thể phụ thuộc vào cột (chỉ mục, chế độ xem, v.v.) đều chặn hoặc không thành công với một lỗi thích hợp. Hành vi này đảm bảo rằng cột thay đổi trực tuyến sẽ không bị lỗi do các phụ thuộc được đưa vào trong khi hoạt động đang chạy.
  • Việc thay đổi một cột từ NOT NULL thành NULL không được hỗ trợ như một hoạt động trực tuyến khi cột đã thay đổi được tham chiếu bởi các chỉ mục không hợp nhất.
  • ALTER trực tuyến không được hỗ trợ khi cột được tham chiếu bởi ràng buộc kiểm tra và hoạt động ALTER đang hạn chế độ chính xác của cột (số hoặc ngày giờ).
  • Không thể sử dụng tùy chọn WAIT_AT_LOW_PRIORITY với cột thay đổi trực tuyến.
  • ALTER COLUMN ... ADD / DROP PERSISTED không được hỗ trợ cho cột thay đổi trực tuyến.
  • ALTER COLUMN ... ADD / DROP ROWGUIDCOL / NOT FOR REPLICATION không bị ảnh hưởng bởi cột thay đổi trực tuyến.
  • Cột thay đổi trực tuyến không hỗ trợ thay đổi bảng nơi theo dõi thay đổi được bật hoặc đó là nhà xuất bản sao chép hợp nhất.
  • Cột thay đổi trực tuyến không hỗ trợ thay đổi từ hoặc sang các loại dữ liệu CLR.
  • Cột thay đổi trực tuyến không hỗ trợ thay đổi thành kiểu dữ liệu XML có tập hợp giản đồ khác với tập hợp giản đồ hiện tại.
  • Cột thay đổi trực tuyến không làm giảm các hạn chế về thời điểm có thể thay đổi cột. Tham chiếu theo chỉ mục / thống kê, v.v., có thể khiến thay đổi không thành công.
  • Cột thay đổi trực tuyến không hỗ trợ thay đổi nhiều cột đồng thời.
  • Cột thay đổi trực tuyến không có hiệu lực trong bảng tạm thời do hệ thống tạo phiên bản. Cột ALTER không chạy trực tuyến bất kể giá trị nào được chỉ định cho tùy chọn ONLINE.

Cột thay đổi trực tuyến có các yêu cầu, hạn chế và chức năng tương tự như tạo lại chỉ mục trực tuyến, bao gồm:

  • Xây dựng lại chỉ mục trực tuyến không được hỗ trợ khi bảng chứa các cột LOB hoặc dòng lọc kế thừa hoặc khi bảng có chỉ mục cột lưu trữ. Các giới hạn tương tự cũng áp dụng cho cột thay đổi trực tuyến.
  • Một cột hiện có đang được thay đổi yêu cầu phân bổ không gian gấp đôi, cho cột ban đầu và cho cột ẩn mới được tạo.
  • Chiến lược khóa trong khi thao tác trực tuyến cột thay đổi tuân theo cùng một kiểu khóa được sử dụng để tạo chỉ mục trực tuyến.

CÓ KIỂM TRA | VỚI NOCHECK

Chỉ định xem dữ liệu trong bảng có được xác thực hay không dựa trên ràng buộc FOREIGN KEY hoặc CHECK mới được thêm vào hoặc được kích hoạt lại. Nếu bạn không chỉ định, WITH CHECK được giả định cho các ràng buộc mới và WITH NOCHECK được giả định cho các ràng buộc được bật lại.

Nếu bạn không muốn xác minh các ràng buộc CHECK hoặc NGOẠI KHÓA mới so với dữ liệu hiện có, hãy sử dụng WITH NOCHECK. Chúng tôi không khuyên bạn nên làm điều này, ngoại trừ một số trường hợp hiếm hoi. Ràng buộc mới được đánh giá trong tất cả các bản cập nhật dữ liệu sau này. Bất kỳ vi phạm ràng buộc nào bị ngăn chặn bởi WITH NOCHECK khi thêm ràng buộc có thể khiến các bản cập nhật trong tương lai không thành công nếu chúng cập nhật các hàng có dữ liệu không tuân theo ràng buộc. Trình tối ưu hóa truy vấn không xem xét các ràng buộc được xác định VỚI KIỂM TRA. Các ràng buộc như vậy được bỏ qua cho đến khi chúng được kích hoạt lại bằng cách sử dụng bảng ALTER TABLE VỚI CHECK CHECK CONSTRAINT ALL . Để biết thêm thông tin, hãy xem Vô hiệu hóa các ràng buộc về khóa ngoại bằng Tuyên bố CHÈN và CẬP NHẬT .

Xem Thêm  Số lượng SQL là gì? Sử dụng hàm Đếm (*) & Đếm (1) trong SQL - đếm trong sql

ALTER INDEX index_name

Chỉ định rằng số lượng nhóm cho index_name sẽ được thay đổi hoặc thay đổi.

Cú pháp ALTER TABLE … ADD / DROP / ALTER INDEX chỉ được hỗ trợ cho các bảng được tối ưu hóa bộ nhớ.

Quan trọng

Không sử dụng câu lệnh ALTER TABLE, các câu lệnh CREATE INDEX , DROP INDEX , ALTER INDEX PAD_INDEX không được hỗ trợ cho các chỉ mục trên các bảng được tối ưu hóa bộ nhớ.

THÊM

Chỉ định rằng một hoặc nhiều định nghĩa cột, định nghĩa cột được tính toán hoặc các ràng buộc bảng được thêm vào. Hoặc, các cột mà hệ thống sử dụng để lập phiên bản hệ thống được thêm vào. Đối với các bảng được tối ưu hóa bộ nhớ, bạn có thể thêm chỉ mục.

Lưu ý

Các cột mới được thêm vào sau khi tất cả các cột hiện có trong bảng được thay đổi.

Quan trọng

Không sử dụng câu lệnh ALTER TABLE, các câu lệnh CREATE INDEX , DROP INDEX , ALTER INDEX PAD_INDEX không được hỗ trợ cho các chỉ mục trên các bảng được tối ưu hóa bộ nhớ.

THỜI GIAN CHO SYSTEM_TIME (system_start_time_column_name, system_end_time_column_name)

Áp dụng cho : SQL Server (SQL Server 2017 (14.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định tên của các cột mà hệ thống sử dụng để ghi lại khoảng thời gian mà một bản ghi hợp lệ. Bạn có thể chỉ định các cột hiện có hoặc tạo các cột mới như một phần của đối số THÊM THỜI GIAN CHO SYSTEM_TIME. Thiết lập các cột với kiểu dữ liệu của datetime2 và xác định chúng là KHÔNG ĐẦY ĐỦ. Nếu bạn xác định một cột dấu chấm là NULL, một lỗi sẽ xảy ra. Bạn có thể xác định column_constraint và / hoặc Chỉ định Giá trị Mặc định cho các Cột cho các cột system_start_time và system_end_time. Xem Ví dụ A trong các ví dụ về Phiên bản hệ thống sau đây thể hiện việc sử dụng giá trị mặc định cho cột system_end_time.

Sử dụng đối số này với đối số SET SYSTEM_VERSIONING để biến một bảng hiện có thành một bảng tạm thời. Để biết thêm thông tin, hãy xem Bảng tạm Bắt đầu với Bảng tạm trong Cơ sở dữ liệu Azure SQL .

Kể từ SQL Server 2017 (14.x), người dùng có thể đánh dấu một hoặc cả hai cột dấu chấm bằng cờ HIDDEN để ẩn hoàn toàn các cột này sao cho SELECT * FROM & lt; table_name & gt; < / strong> không trả về giá trị cho các cột. Theo mặc định, các cột dấu chấm không bị ẩn. Để được sử dụng, các cột ẩn phải được đưa vào tất cả các truy vấn tham chiếu trực tiếp đến bảng thời gian một cách rõ ràng.

THẢ

Chỉ định rằng một hoặc nhiều định nghĩa cột, định nghĩa cột được tính toán hoặc ràng buộc bảng bị loại bỏ hoặc loại bỏ thông số kỹ thuật cho các cột mà hệ thống sử dụng để lập phiên bản hệ thống.

Lưu ý

Các cột bị giảm trong bảng sổ cái chỉ bị xóa nhẹ. Một cột bị loại bỏ vẫn còn trong bảng sổ cái, nhưng nó được đánh dấu là cột bị loại bỏ bằng cách đặt sys.tables.dropped_ledger_table thành 1. Chế độ xem sổ cái của bảng sổ cái bị giảm cũng được đánh dấu là bị loại bỏ bằng cách đặt sys.tables.dropped_ledger_view_column thành 1. Một bảng sổ cái bị bỏ, bảng lịch sử và chế độ xem sổ cái của nó được đổi tên bằng cách thêm tiền tố (MSSQL_DroppedLedgerTable, MSSQL_DropedLedgerHistory, MSSQL_DroppedLedgerView) và thêm một GUID vào tên ban đầu.ing

CONSTRAINT bind_name

Chỉ định rằng tên_kèm_bản bị xoá khỏi bảng. Nhiều ràng buộc có thể được liệt kê.

Bạn có thể xác định tên do người dùng xác định hoặc do hệ thống cung cấp của ràng buộc bằng cách truy vấn sys.check_constraint , sys.default_constraints , sys.key_constraints < / code> và sys.foreign_keys lượt xem danh mục.

Không thể bỏ ràng buộc CHÍNH CHÍNH KEY nếu có một chỉ mục XML trên bảng.

INDEX index_name

Chỉ định rằng index_name bị xóa khỏi bảng.

Cú pháp ALTER TABLE ... ADD / DROP / ALTER INDEX chỉ được hỗ trợ cho các bảng được tối ưu hóa bộ nhớ.

Quan trọng

Không sử dụng câu lệnh ALTER TABLE, các câu lệnh CREATE INDEX , DROP INDEX , ALTER INDEX PAD_INDEX không được hỗ trợ cho các chỉ mục trên bảng được tối ưu hóa bộ nhớ.

COLUMN column_name

Chỉ định rằng tên_kích_thước hoặc tên_mục_số bị xoá khỏi bảng. Nhiều cột có thể được liệt kê.

Không thể bỏ một cột khi nó:

  • Được sử dụng trong một chỉ mục, cho dù là một cột chính hay một BAO GỒM
  • Được sử dụng trong ràng buộc CHECK, NGOẠI KHÓA, DUY NHẤT hoặc CHÍNH XÁC.
  • Được liên kết với một đối tượng mặc định được xác định bằng từ khóa DEFAULT hoặc được liên kết với một đối tượng mặc định.
  • Bị ràng buộc với một quy tắc.

Lưu ý

Việc giảm một cột không lấy lại dung lượng đĩa của cột. Bạn có thể phải lấy lại dung lượng đĩa của cột bị giảm khi kích thước hàng của bảng gần hoặc đã vượt quá giới hạn của nó. Lấy lại không gian bằng cách tạo chỉ mục nhóm trên bảng hoặc tạo lại chỉ mục được nhóm hiện có bằng cách sử dụng ALTER INDEX . Để biết thông tin về tác động của việc loại bỏ các loại dữ liệu LOB, hãy xem bài đăng trên blog CSS này.

THỜI GIAN CHO SYSTEM_TIME

Áp dụng cho : SQL Server (SQL Server 2016 (13.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Bỏ thông số kỹ thuật cho các cột mà hệ thống sẽ sử dụng để lập phiên bản hệ thống.

VỚI & lt; drop_clustered_constraint_option & gt;

Chỉ định rằng một hoặc nhiều tùy chọn ràng buộc nhóm thả được đặt.

MAXDOP = max_degree_of_parallelism

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ ghi đè tùy chọn cấu hình mức độ song song tối đa trong suốt thời gian hoạt động. Để biết thêm thông tin, hãy xem Định cấu hình Tùy chọn cấu hình máy chủ song song mức độ tối đa .

Sử dụng tùy chọn MAXDOP để giới hạn số lượng bộ xử lý được sử dụng trong quá trình thực thi kế hoạch song song. Tối đa là 64 bộ xử lý.

max_degree_of_parallelism có thể là một trong các giá trị sau:

1
Ngăn chặn việc tạo kế hoạch song song.

& gt; 1
Giới hạn số lượng bộ xử lý tối đa được sử dụng trong hoạt động lập chỉ mục song song ở số lượng được chỉ định.

0 (mặc định)
Sử dụng số lượng bộ xử lý thực tế trở xuống dựa trên khối lượng công việc hiện tại của hệ thống.

Để biết thêm thông tin, hãy xem Định cấu hình hoạt động chỉ mục song song .

ONLINE = {ON | TẮT } & lt; như áp dụng cho drop_clustered_constraint_option & gt;

Chỉ định liệu các bảng cơ bản và chỉ mục được liên kết có khả dụng cho các truy vấn và sửa đổi dữ liệu trong quá trình hoạt động chỉ mục hay không. Mặc định là TẮT. Bạn có thể chạy REBUILD như một hoạt động TRỰC TUYẾN.

BẬT
Khóa bảng dài hạn không được giữ trong suốt thời gian hoạt động của chỉ mục. Trong giai đoạn chính của hoạt động chỉ mục, chỉ có khóa Chia sẻ ý định (IS) được giữ trên bảng nguồn. Hành vi này cho phép các truy vấn hoặc cập nhật đối với bảng và chỉ mục bên dưới tiếp tục. Khi bắt đầu hoạt động, khóa Chia sẻ (S) được giữ trên đối tượng nguồn trong một thời gian ngắn. Khi kết thúc hoạt động, trong một thời gian ngắn, khóa S (Chia sẻ) được nhận trên nguồn nếu một chỉ mục không hợp nhất đang được tạo. Hoặc, khóa SCH-M (Sửa đổi lược đồ) được nhận khi một chỉ mục nhóm được tạo hoặc bị loại bỏ trực tuyến và khi một chỉ mục được nhóm hoặc không được phân loại đang được xây dựng lại. Không thể đặt ONLINE thành ON khi một chỉ mục đang được tạo trên một bảng tạm thời cục bộ. Chỉ cho phép hoạt động xây dựng lại heap một luồng.

Để chạy DDL cho SWITCH hoặc xây dựng lại chỉ mục trực tuyến, tất cả các giao dịch chặn đang hoạt động chạy trên một bảng cụ thể phải được hoàn thành. Khi thực thi, thao tác SWITCH hoặc xây dựng lại ngăn các giao dịch mới bắt đầu và có thể ảnh hưởng đáng kể đến thông lượng khối lượng công việc và tạm thời trì hoãn quyền truy cập vào bảng bên dưới.

TẮT
Khóa bảng được áp dụng trong suốt thời gian hoạt động của chỉ mục. Thao tác lập chỉ mục ngoại tuyến tạo, xây dựng lại hoặc loại bỏ chỉ mục được nhóm hoặc xây dựng lại hoặc loại bỏ chỉ mục không hợp nhất, có được khóa sửa đổi giản đồ (Sch-M) trên bảng. Khóa này ngăn chặn tất cả quyền truy cập của người dùng vào bảng bên dưới trong suốt thời gian hoạt động. Thao tác lập chỉ mục ngoại tuyến tạo ra một chỉ mục không hợp nhất có được một khóa Chia sẻ (S) trên bảng. Khóa này ngăn các cập nhật cho bảng bên dưới nhưng cho phép đọc các thao tác, chẳng hạn như câu lệnh SELECT. Hoạt động tạo lại heap đa luồng được cho phép.

Để biết thêm thông tin, hãy xem Cách hoạt động của hoạt động lập chỉ mục trực tuyến .

Lưu ý

Các thao tác lập chỉ mục trực tuyến không khả dụng trong mọi phiên bản SQL Server. Để biết thêm thông tin, hãy xem Các phiên bản và Tính năng được Hỗ trợ cho SQL Server 2016 Các phiên bản và các tính năng được hỗ trợ cho SQL Server 2017 .

CHUYỂN ĐẾN {partition_scheme_name ( column_name [, ... n] ) < / strong> | nhóm tập tin | " mặc định " }

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định một vị trí để di chuyển các hàng dữ liệu hiện ở cấp độ lá của chỉ mục nhóm. Bàn được chuyển đến vị trí mới. Tùy chọn này chỉ áp dụng cho các ràng buộc tạo chỉ mục theo nhóm.

Lưu ý

Trong ngữ cảnh này, mặc định không phải là một từ khóa. Đây là mã định danh cho nhóm tệp mặc định và phải được phân tách, như trong CHUYỂN ĐẾN " mặc định " hoặc CHUYỂN ĐẾN [ mặc định ] . Nếu " default " được chỉ định, tùy chọn QUOTED_IDENTIFIER phải được BẬT cho phiên hiện tại. Đây là thiết lập mặc định. Để biết thêm thông tin, hãy xem SET QUOTED_IDENTIFIER .

{KIỂM TRA | NOCHECK} CONSTRAINT

Chỉ định rằng tên miền được bật hoặc tắt. Tùy chọn này chỉ có thể được sử dụng với các ràng buộc FOREIGN KEY và CHECK. Khi NOCHECK được chỉ định, ràng buộc sẽ bị vô hiệu hóa và các lần chèn hoặc cập nhật vào cột trong tương lai không được xác thực theo các điều kiện ràng buộc. Không thể tắt các ràng buộc DEFAULT, PRIMARY KEY và UNIQUE.

TẤT CẢ
Chỉ định rằng tất cả các ràng buộc bị vô hiệu hóa với tùy chọn NOCHECK hoặc được bật với tùy chọn CHECK.

{BẬT | TẮT} TRIGGER

Chỉ định rằng trigger_name được bật hoặc tắt. Khi trình kích hoạt bị tắt, nó vẫn được xác định cho bảng. Tuy nhiên, khi các câu lệnh INSERT, UPDATE hoặc DELETE chạy trên bảng, các hành động trong trình kích hoạt sẽ không được thực hiện cho đến khi trình kích hoạt được bật lại.

TẤT CẢ
Chỉ định rằng tất cả các trình kích hoạt trong bảng được bật hoặc tắt.

trigger_name
Chỉ định tên của trình kích hoạt để tắt hoặc bật.

{BẬT | DISABLE} CHANGE_TRACKING

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định liệu tính năng theo dõi thay đổi có bị tắt cho bảng hay không. Theo mặc định, theo dõi thay đổi bị tắt.

Tùy chọn này chỉ khả dụng khi tính năng theo dõi thay đổi được bật cho cơ sở dữ liệu. Để biết thêm thông tin, hãy xem Tùy chọn ĐẶT CƠ SỞ DỮ LIỆU THÊM .

Để bật theo dõi thay đổi, bảng phải có khóa chính.

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định liệu Công cụ cơ sở dữ liệu theo dõi, thay đổi các cột được theo dõi đã được cập nhật hay chưa. Giá trị mặc định là TẮT.

SWITCH [PARTITION source_partition_number_expression] TO [schema_name . ] target_extable [PARTITION target_parression_number_extable]

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chuyển một khối dữ liệu theo một trong những cách sau:

  • Gán lại tất cả dữ liệu của bảng dưới dạng phân vùng cho một bảng được phân vùng đã tồn tại.
  • Chuyển một phân vùng từ một bảng được phân vùng này sang một bảng được phân vùng khác.
  • Gán lại tất cả dữ liệu trong một phân vùng của bảng được phân vùng cho một bảng không được phân vùng hiện có.

Nếu bảng là một bảng được phân vùng, bạn phải chỉ định source_partition_number_expression. Nếu target_table được phân vùng, bạn phải chỉ định target_partition_number_expression. Khi gán lại dữ liệu của bảng dưới dạng phân vùng cho bảng được phân vùng đã tồn tại hoặc chuyển một phân vùng từ một bảng được phân vùng này sang một bảng được phân vùng khác, phân vùng đích phải tồn tại và nó phải trống.

Khi gán lại dữ liệu của một phân vùng để tạo thành một bảng, bảng đích phải đã tồn tại và nó phải trống. Cả bảng hoặc phân vùng nguồn và bảng hoặc phân vùng đích, phải được đặt trong cùng một nhóm tệp. Các chỉ mục hoặc phân vùng chỉ mục tương ứng cũng phải được đặt trong cùng một nhóm tệp. Nhiều hạn chế bổ sung áp dụng cho việc chuyển đổi phân vùng. table và target_table không được giống nhau. target_table có thể là một số nhận dạng nhiều phần.

Cả biểu thức source_partition_number_expression và target_partition_number_expression đều là các biểu thức hằng số có thể tham chiếu đến các biến và hàm. Chúng bao gồm các biến kiểu do người dùng xác định và các hàm do người dùng xác định. Chúng không thể tham chiếu các biểu thức Transact-SQL.

Một bảng được phân vùng có chỉ mục cột lưu trữ được phân cụm hoạt động giống như một đống được phân vùng:

  • Khóa chính phải bao gồm khóa phân vùng.
  • Một chỉ mục duy nhất phải bao gồm khóa phân vùng. Tuy nhiên, việc bao gồm khóa phân vùng với chỉ mục duy nhất hiện có có thể thay đổi tính duy nhất.
  • Để chuyển đổi các phân vùng, tất cả các chỉ mục không hợp nhất phải bao gồm khoá phân vùng.

Đối với hạn chế SWITCH khi sử dụng bản sao, hãy xem Bản sao các Bảng và Chỉ mục được Phân vùng .

Chỉ mục cột lưu trữ không phân tán được tạo ở định dạng chỉ đọc trước SQL Server 2016 và cho Cơ sở dữ liệu SQL trước phiên bản V12. Bạn phải xây dựng lại các chỉ mục cột lưu trữ không được phân bổ thành định dạng hiện tại (có thể cập nhật được) trước khi có thể chạy bất kỳ hoạt động PARTITION nào.

SET ( FILESTREAM_ON = {partition_scheme_name | filestream_filegroup_name | " default < / strong> " | " NULL "} )

Áp dụng cho : SQL Server (SQL Server 2008 trở lên). Cơ sở dữ liệu Azure SQL không hỗ trợ FILESTREAM .

Chỉ định nơi lưu trữ dữ liệu FILESTREAM.

ALTER TABLE với mệnh đề SET FILESTREAM_ON chỉ thành công nếu bảng không có cột FILESTREAM. Bạn có thể thêm các cột FILESTREAM bằng cách sử dụng câu lệnh ALTER TABLE thứ hai.

Nếu bạn chỉ định partition_scheme_name, các quy tắc cho TẠO BẢNG sẽ được áp dụng. Đảm bảo rằng bảng đã được phân vùng cho dữ liệu hàng và lược đồ phân vùng của nó sử dụng cùng một chức năng phân vùng và các cột như lược đồ phân vùng FILESTREAM.

filestream_filegroup_name chỉ định tên của nhóm tệp FILESTREAM. Nhóm tệp phải có một tệp được xác định cho nhóm tệp bằng cách sử dụng câu lệnh CREATE DATABASE hoặc ALTER DATABASE , nếu không sẽ dẫn đến lỗi.

" default " chỉ định nhóm tệp FILESTREAM với bộ thuộc tính DEFAULT. Nếu không có nhóm tệp FILESTREAM, thì sẽ xảy ra lỗi.

" NULL " chỉ định rằng tất cả các tham chiếu đến nhóm tệp FILESTREAM cho bảng sẽ bị xóa. Trước tiên, tất cả các cột FILESTREAM phải được loại bỏ. Sử dụng SET FILESTREAM_ON = " NULL " để xóa tất cả dữ liệu FILESTREAM được liên kết với bảng.

SET ( SYSTEM_VERSIONING = {TẮT | BẬT [(HISTORY_TABLE = schema_name. history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF}])]} )

Áp dụng cho : SQL Server (SQL Server 2016 (13.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Tắt hoặc bật lập phiên bản hệ thống của bảng. Để cho phép lập phiên bản hệ thống của một bảng, hệ thống xác minh rằng kiểu dữ liệu, ràng buộc tính nullability và ràng buộc khóa chính được đáp ứng cho việc lập phiên bản hệ thống được đáp ứng. Hệ thống sẽ ghi lại lịch sử của từng bản ghi trong bảng được tạo phiên bản hệ thống trong một bảng lịch sử riêng biệt. Nếu đối số HISTORY_TABLE không được sử dụng, tên của bảng lịch sử này sẽ là MSSQL_TemporalHistoryFor & lt; primary_table_object_id & gt; . Nếu bảng lịch sử không tồn tại, hệ thống sẽ tạo một bảng lịch sử mới phù hợp với lược đồ của bảng hiện tại, tạo liên kết giữa hai bảng và cho phép hệ thống ghi lại lịch sử của từng bản ghi trong bảng hiện tại trong bảng lịch sử . Nếu bạn sử dụng đối số HISTORY_TABLE để tạo liên kết đến và sử dụng bảng lịch sử hiện có, hệ thống sẽ tạo liên kết giữa bảng hiện tại và bảng được chỉ định. Khi tạo liên kết đến bảng lịch sử hiện có, bạn có thể chọn thực hiện kiểm tra tính nhất quán của dữ liệu. Kiểm tra tính nhất quán dữ liệu này đảm bảo rằng các bản ghi hiện có không chồng chéo. Chạy kiểm tra tính nhất quán của dữ liệu là mặc định. Sử dụng đối số SYSTEM_VERSIONING = ON trên bảng được xác định với mệnh đề PERIOD FOR SYSTEM_TIME để biến bảng hiện có thành bảng tạm thời. Để biết thêm thông tin, hãy xem Bảng tạm .

HISTORY_RETENTION_PERIOD = { INFINITE | số {NGÀY | NGÀY | TUẦN LỄ | TUẦN LỄ | THÁNG NĂM | THÁNG NĂM | NĂM | NĂM}}

Áp dụng cho : SQL Server 2017 (14.x) và Cơ sở dữ liệu Azure SQL.

Chỉ định lưu giữ hữu hạn hoặc vô hạn cho dữ liệu lịch sử trong bảng thời gian. Nếu bỏ qua, tỷ lệ giữ chân vô hạn được giả định.

DATA_DELETION

Chỉ áp dụng cho: Azure SQL Edge chỉ

Cho phép dọn dẹp dữ liệu cũ hoặc cũ dựa trên chính sách lưu giữ khỏi các bảng trong cơ sở dữ liệu. Để biết thêm thông tin, hãy xem Bật và Tắt lưu giữ dữ liệu . Các thông số sau phải được chỉ định để kích hoạt tính năng lưu giữ dữ liệu.

FILTER_COLUMN = {column_name}
Chỉ định cột, cột này sẽ được sử dụng để xác định xem các hàng trong bảng có lỗi thời hay không. Các loại dữ liệu sau được phép cho cột lọc.

  • Ngày tháng
  • DateTime
  • DateTime2
  • SmallDateTime
  • DateTimeOffset

RETENTION_PERIOD = {INFINITE | số {NGÀY | NGÀY | TUẦN LỄ | TUẦN LỄ | THÁNG NĂM | THÁNG NĂM | NĂM | NĂM}}
Chỉ định chính sách khoảng thời gian lưu giữ cho bảng. Khoảng thời gian lưu giữ được chỉ định là sự kết hợp của giá trị số nguyên dương và đơn vị phần ngày.

SET ( LOCK_ESCALATION = {AUTO | TABLE | DISABLE} ) < / h4>

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định các phương pháp khóa leo thang được phép cho một bảng.

TỰ ĐỘNG
Tùy chọn này cho phép Công cụ cơ sở dữ liệu SQL Server chọn mức độ chi tiết báo cáo khóa phù hợp với lược đồ bảng.

  • Nếu bảng được phân chia, khóa leo thang sẽ được cho phép theo mức độ chi tiết của heap hoặc B-tree (HoBT). Nói cách khác, sự leo thang sẽ được phép lên cấp độ phân vùng. Sau khi khóa được nâng lên cấp độ HoBT, khóa sẽ không được nâng cấp sau đó lên mức độ chi tiết của TABLE.
  • Nếu bảng không được phân vùng, việc báo cáo khóa được thực hiện đến mức độ chi tiết của TABLE.

BẢNG
Khóa leo thang được thực hiện ở mức độ chi tiết của bảng cho dù bảng được phân vùng hay không được phân vùng. TABLE là giá trị mặc định.

TẮT
Ngăn chặn khóa leo thang trong hầu hết các trường hợp. Khóa cấp bảng không hoàn toàn không được phép. Ví dụ: khi bạn đang quét một bảng không có chỉ mục được phân cụm ở mức cách ly có thể tuần tự hóa, Database Engine phải thực hiện khóa bảng để bảo vệ tính toàn vẹn của dữ liệu.

REBUILD

Sử dụng cú pháp REBUILD WITH để xây dựng lại toàn bộ bảng bao gồm tất cả các phân vùng trong một bảng được phân vùng. Nếu bảng có chỉ mục được phân nhóm, tùy chọn REBUILD sẽ xây dựng lại chỉ mục được phân nhóm. REBUILD có thể được chạy như một hoạt động TRỰC TUYẾN.

Sử dụng cú pháp REBUILD PARTITION để xây dựng lại một phân vùng duy nhất trong bảng được phân vùng.

PARTITION = ALL

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Xây dựng lại tất cả các phân vùng khi thay đổi cài đặt nén phân vùng.

REBUILD VỚI (& lt; constr_option & gt;)

Tất cả các tùy chọn đều áp dụng cho bảng có chỉ mục được phân nhóm. Nếu bảng không có chỉ mục nhóm, cấu trúc heap chỉ bị ảnh hưởng bởi một số tùy chọn.

Khi một cài đặt nén cụ thể không được chỉ định với hoạt động REBUILD, cài đặt nén hiện tại cho phân vùng sẽ được sử dụng. Để trả lại cài đặt hiện tại, hãy truy vấn cột data_compression trong chế độ xem danh mục sys.partitions .

Để có mô tả đầy đủ về các tùy chọn xây dựng lại, hãy xem ALTER TABLE index_option .

DATA_COMPRESSION

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định tùy chọn nén dữ liệu cho bảng, số phân vùng hoặc phạm vi phân vùng được chỉ định. Các tùy chọn như sau:

KHÔNG
Bảng hoặc các phân vùng được chỉ định không được nén. Tùy chọn này không áp dụng cho các bảng cột trong kho.

ROW
Bảng hoặc phân vùng được chỉ định được nén bằng cách sử dụng nén hàng. Tùy chọn này không áp dụng cho các bảng cột trong kho.

TRANG
Bảng hoặc các phân vùng cụ thể được nén bằng cách sử dụng tính năng nén trang. Tùy chọn này không áp dụng cho các bảng cột trong kho.

COLUMNSTORE
Áp dụng cho : SQL Server (SQL Server 2014 (12.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ áp dụng cho các bảng cột trong kho. COLUMNSTORE chỉ định giải nén một phân vùng đã được nén bằng tùy chọn COLUMNSTORE_ARCHIVE. Khi dữ liệu được khôi phục, dữ liệu sẽ tiếp tục được nén bằng cách nén columnstore được sử dụng cho tất cả các bảng columnstore.

COLUMNSTORE_ARCHIVE
Áp dụng cho : SQL Server (SQL Server 2014 (12.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ áp dụng cho các bảng columnstore, là các bảng được lưu trữ với một chỉ mục columnstore được phân cụm. COLUMNSTORE_ARCHIVE sẽ nén thêm phân vùng được chỉ định xuống kích thước nhỏ hơn. Sử dụng tùy chọn này để lưu trữ hoặc các trường hợp khác cần ít bộ nhớ hơn và có thể dành nhiều thời gian hơn để lưu trữ và truy xuất.

Để tạo lại nhiều phân vùng cùng một lúc, hãy xem index_option . Nếu bảng không có chỉ mục được phân nhóm, việc thay đổi nén dữ liệu sẽ xây dựng lại đống và các chỉ mục không phân nhóm. Để biết thêm thông tin về nén, hãy xem Nén dữ liệu .

XML_COMPRESSION

Áp dụng cho : Bản xem trước SQL Server 2022 (16.x) trở lên và Bản xem trước cơ sở dữ liệu Azure SQL.

Chỉ định tùy chọn nén XML cho bất kỳ cột kiểu dữ liệu xml nào trong bảng. Các tùy chọn như sau:

BẬT
Các cột sử dụng kiểu dữ liệu xml được nén.

TẮT
Các cột sử dụng kiểu dữ liệu xml không được nén.

ONLINE = {ON | TẮT } & lt; như áp dụng cho single_partition_rebuild_option & gt;

Chỉ định xem một phân vùng duy nhất của các bảng bên dưới và các chỉ mục liên quan có sẵn sàng cho các truy vấn và sửa đổi dữ liệu trong quá trình hoạt động chỉ mục hay không. Mặc định là TẮT. Bạn có thể chạy REBUILD như một hoạt động TRỰC TUYẾN.

BẬT
Khóa bảng dài hạn không được giữ trong suốt thời gian hoạt động của chỉ mục. Khóa S trên bảng được yêu cầu khi bắt đầu xây dựng lại chỉ mục và khóa Sch-M trên bảng khi kết thúc xây dựng lại chỉ mục trực tuyến. Mặc dù cả hai khóa đều là khóa siêu dữ liệu ngắn, nhưng khóa Sch-M phải đợi tất cả các giao dịch chặn được hoàn thành. Trong thời gian chờ, khóa Sch-M chặn tất cả các giao dịch khác chờ sau khóa này khi truy cập vào cùng một bảng.

Lưu ý

Xây dựng lại chỉ mục trực tuyến có thể đặt các tùy chọn low_priasty_lock_wait được mô tả sau trong phần này.

TẮT
Khóa bảng được áp dụng trong suốt thời gian hoạt động chỉ mục. Điều này ngăn tất cả người dùng truy cập vào bảng bên dưới trong suốt thời gian hoạt động.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS

Áp dụng cho : SQL Server (SQL Server 2008 trở lên) và Cơ sở dữ liệu Azure SQL.

Tên của tập hợp cột. Tập hợp cột là một biểu diễn XML không định kiểu kết hợp tất cả các cột thưa thớt của bảng thành một đầu ra có cấu trúc. Không thể thêm tập hợp cột vào bảng có chứa các cột thưa thớt. Để biết thêm thông tin về tập hợp cột, hãy xem Sử dụng tập hợp cột .

{BẬT | DISABLE} FILETABLE_NAMESPACE

Áp dụng cho : SQL Server (SQL Server 2012 (11.x) trở lên).

Bật hoặc tắt các ràng buộc do hệ thống xác định trên FileTable. Chỉ có thể được sử dụng với FileTable.

SET (FILETABLE_DIRECTORY = directory_name)

Áp dụng cho : SQL Server (SQL Server 2012 (11.x) trở lên). Cơ sở dữ liệu Azure SQL không hỗ trợ FILETABLE .

Chỉ định tên thư mục FileTable tương thích với Windows. Tên này phải là duy nhất trong số tất cả các tên thư mục FileTable trong cơ sở dữ liệu. So sánh tính duy nhất không phân biệt chữ hoa chữ thường, bất chấp cài đặt đối chiếu SQL. Chỉ có thể được sử dụng với FileTable.

REMOTE_DATA_ARCHIVE

Áp dụng cho : SQL Server (SQL Server 2017 (14.x) trở lên).

Bật hoặc tắt Cơ sở dữ liệu Stretch cho một bảng. Để biết thêm thông tin, hãy xem Cơ sở dữ liệu Stretch .

Bật Cơ sở dữ liệu kéo dài cho một bảng

Khi bạn bật Kéo dài cho bảng bằng cách chỉ định ON , bạn cũng phải chỉ định MIGRATION_STATE = OUTBOUND để bắt đầu di chuyển dữ liệu ngay lập tức hoặc MIGRATION_STATE = PAUSED < / code> để hoãn việc di chuyển dữ liệu. Giá trị mặc định là MIGRATION_STATE = OUTBOUND . Để biết thêm thông tin về cách bật Stretch cho một bảng, hãy xem Bật Stretch Database cho một bảng .

Điều kiện tiên quyết . Trước khi bật Kéo dài cho bảng, bạn phải bật Kéo dài trên máy chủ và trên cơ sở dữ liệu. Để biết thêm thông tin, hãy xem Bật Stretch Database cho cơ sở dữ liệu .

Quyền . Việc bật Stretch cho cơ sở dữ liệu hoặc bảng yêu cầu quyền db_owner . Việc bật Kéo giãn cho một bảng cũng yêu cầu quyền ALTER trên bảng.

Vô hiệu hóa Cơ sở dữ liệu Stretch cho một bảng

Khi bạn tắt tính năng Kéo dài cho bảng, bạn có hai tùy chọn cho dữ liệu từ xa đã được di chuyển sang Azure. Để biết thêm thông tin, hãy xem Vô hiệu hóa cơ sở dữ liệu Stretch và khôi phục dữ liệu từ xa .

  • Để tắt tính năng Kéo dài cho bảng và sao chép dữ liệu từ xa cho bảng từ Azure trở lại SQL Server, hãy chạy lệnh sau. Không thể hủy lệnh này.

      ALTER TABLE & lt; table_name & gt;
       SET (REMOTE_DATA_ARCHIVE (MIGRATION_STATE = INBOUND));
     

Thao tác này phát sinh chi phí truyền dữ liệu và không thể hủy được. Để biết thêm thông tin, hãy xem Chi tiết giá của Chuyển dữ liệu .

Sau khi tất cả dữ liệu từ xa đã được sao chép từ Azure trở lại SQL Server, tính năng Stretch bị vô hiệu hóa cho bảng.

  • Để tắt tính năng Kéo dài cho một bảng và bỏ dữ liệu từ xa, hãy chạy lệnh sau.

     ALTER TABLE & lt; table_name & gt;
       SET (REMOTE_DATA_ARCHIVE = OFF_WITHOUT_DATA_RECOVERY (MIGRATION_STATE = PAUSED));
     

Sau khi bạn tắt Cơ sở dữ liệu kéo dài cho một bảng, quá trình di chuyển dữ liệu sẽ dừng lại và kết quả truy vấn không còn bao gồm kết quả từ bảng từ xa.

Tắt tính năng Kéo dài không xóa bảng từ xa. Nếu bạn muốn xóa bảng từ xa, hãy xóa bảng đó bằng cách sử dụng cổng Azure.

[FILTER_PREDICATE = {null | vị ngữ}]

Áp dụng cho : SQL Server (SQL Server 2017 (14.x) trở lên).

Tùy chọn chỉ định một vị từ bộ lọc để chọn các hàng để di chuyển từ bảng chứa cả dữ liệu lịch sử và hiện tại. Vị từ phải gọi một hàm có giá trị bảng nội tuyến xác định. Để biết thêm thông tin, hãy xem Bật Cơ sở dữ liệu Stretch cho bảng Chọn các hàng để di chuyển bằng cách sử dụng chức năng lọc - Cơ sở dữ liệu Stretch .

Quan trọng

Nếu bạn cung cấp một vị từ bộ lọc hoạt động kém, thì việc di chuyển dữ liệu cũng hoạt động kém. Cơ sở dữ liệu Stretch áp dụng vị từ bộ lọc cho bảng bằng cách sử dụng toán tử ÁP DỤNG CHÉO.

Nếu bạn không chỉ định một vị từ bộ lọc, toàn bộ bảng sẽ được di chuyển.

Khi bạn chỉ định một vị từ bộ lọc, bạn cũng phải chỉ định MIGRATION_STATE.

MIGRATION_STATE = {OUTBOUND | LIÊN HỆ | ĐÃ TẠM DỪNG}

Áp dụng cho : SQL Server (SQL Server 2017 (14.x) trở lên).

  • Chỉ định OUTBOUND để di chuyển dữ liệu từ SQL Server sang Azure.

  • Chỉ định INBOUND để sao chép dữ liệu từ xa cho bảng từ Azure trở lại SQL Server và tắt tính năng Kéo dài cho bảng. Để biết thêm thông tin, hãy xem Vô hiệu hóa cơ sở dữ liệu Stretch và khôi phục dữ liệu từ xa .

    Hoạt động này phát sinh chi phí truyền dữ liệu và không thể hủy được.

  • Chỉ định PAUSED để tạm dừng hoặc hoãn việc di chuyển dữ liệu. Để biết thêm thông tin, hãy xem Tạm dừng và tiếp tục di chuyển dữ liệu - Cơ sở dữ liệu Stretch .

WAIT_AT_LOW_PRIORITY

Áp dụng cho : SQL Server (SQL Server 2014 (12.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Việc xây dựng lại chỉ mục trực tuyến phải đợi các thao tác chặn trên bảng này. WAIT_AT_LOW_PRIORITY chỉ ra rằng hoạt động xây dựng chỉ mục trực tuyến đang đợi các khóa có mức độ ưu tiên thấp, cho phép các hoạt động khác tiếp tục trong khi hoạt động xây dựng chỉ mục trực tuyến đang chờ. Bỏ qua tùy chọn CHỜ Ở ƯU TIÊN THẤP cũng giống như WAIT_AT_LOW_PRIORITY (MAX_DURATION = 0 phút, ABORT_AFTER_WAIT = NONE) .

MAX_DURATION = thời gian [ MINUTES ]
Áp dụng cho : SQL Server (SQL Server 2014 (12.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Thời gian chờ, là giá trị số nguyên được chỉ định bằng phút, khóa SWITCH hoặc khóa xây dựng lại chỉ mục trực tuyến sẽ đợi với mức độ ưu tiên thấp khi chạy lệnh DDL. Nếu thao tác bị chặn trong thời gian MAX_DURATION , một trong các hành động ABORT_AFTER_WAIT sẽ chạy. Thời gian MAX_DURATION luôn tính bằng phút và bạn có thể bỏ qua từ MINUTES .

ABORT_AFTER_WAIT = [ KHÔNG | TỰ | CHẶN CHẶN }]

Áp dụng cho : SQL Server (SQL Server 2014 (12.x) trở lên) và Cơ sở dữ liệu Azure SQL.

KHÔNG CÓ
Tiếp tục đợi khóa với mức độ ưu tiên bình thường (thông thường).

TỰ
Thoát khỏi SWITCH hoặc thao tác xây dựng lại chỉ mục trực tuyến DDL hiện đang được chạy mà không cần thực hiện bất kỳ hành động nào.

CHẶN CHẶN
Hủy tất cả các giao dịch của người dùng hiện đang chặn hoạt động SWITCH hoặc chỉ mục trực tuyến xây dựng lại DDL để hoạt động có thể tiếp tục.

Yêu cầu quyền ALTER MỌI KẾT NỐI .

NẾU TỒN TẠI

Áp dụng cho : SQL Server (SQL Server 2016 (13.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ giảm cột hoặc ràng buộc có điều kiện nếu nó đã tồn tại.

RESUMABLE = {BẬT | TẮT}

Áp dụng cho : SQL Server 2022 trở lên.

Chỉ định xem thao tác ALTER TABLE ADD CONSTRAINT có thể tiếp tục được hay không. Thao tác thêm ràng buộc bảng có thể tiếp tục khi ON . Thao tác thêm ràng buộc bảng không thể tiếp tục khi OFF . Mặc định là OFF . Tùy chọn RESUMABLE có thể được sử dụng như một phần của ALTER TABLE index_option trong ALTER TABLE table_constraint .

MAX_DURATION khi được sử dụng với RESUMABLE = ON (yêu cầu ONLINE = ON) cho biết thời gian (một giá trị số nguyên được chỉ định bằng phút) mà hoạt động ràng buộc thêm trực tuyến có thể tiếp tục được thực thi trước khi bị tạm dừng. Nếu không được chỉ định, hoạt động sẽ tiếp tục cho đến khi hoàn thành.

Để biết thêm thông tin về cách bật và sử dụng các thao tác ALTER TABLE ADD CONSTRAINT có thể tiếp tục, hãy xem Thêm ràng buộc của bảng có thể tiếp tục .

Nhận xét

Để thêm các hàng dữ liệu mới, hãy sử dụng INSERT . Để xóa các hàng dữ liệu, hãy sử dụng DELETE hoặc TRUNCATE TABLE . Để thay đổi giá trị trong các hàng hiện có, hãy sử dụng CẬP NHẬT .

Nếu có bất kỳ kế hoạch thực thi nào trong bộ đệm ẩn thủ tục tham chiếu đến bảng, ALTER TABLE sẽ đánh dấu chúng sẽ được biên dịch lại trong lần thực thi tiếp theo.

Thay đổi kích thước của cột

Bạn có thể thay đổi độ dài, độ chính xác hoặc tỷ lệ của cột bằng cách chỉ định kích thước mới cho kiểu dữ liệu cột. Sử dụng mệnh đề ALTER COLUMN. Nếu dữ liệu tồn tại trong cột, kích thước mới không được nhỏ hơn kích thước tối đa của dữ liệu. Ngoài ra, bạn không thể xác định cột trong chỉ mục, trừ khi cột là kiểu dữ liệu varchar , nvarchar hoặc varbinary và chỉ mục không phải là kết quả của ràng buộc CHÍNH CHÍNH. Xem ví dụ trong phần ngắn có tiêu đề Thay đổi định nghĩa cột .

Ổ khóa và BẢNG BÁO CÁO

Các thay đổi bạn chỉ định trong triển khai ALTER TABLE ngay lập tức. Nếu các thay đổi yêu cầu sửa đổi các hàng trong bảng, ALTER TABLE sẽ cập nhật các hàng. ALTER TABLE có được một khóa sửa đổi lược đồ (SCH-M) trên bảng để đảm bảo rằng không có kết nối nào khác tham chiếu ngay cả siêu dữ liệu cho bảng trong quá trình thay đổi, ngoại trừ các hoạt động lập chỉ mục trực tuyến yêu cầu khóa SCH-M ngắn ở cuối. Trong thao tác ALTER TABLE ... SWITCH , khóa được thu nhận trên cả bảng nguồn và bảng đích. Các sửa đổi được thực hiện đối với bảng được ghi lại và có thể khôi phục hoàn toàn. Những thay đổi ảnh hưởng đến tất cả các hàng trong bảng lớn, chẳng hạn như giảm một cột hoặc, trên một số phiên bản của SQL Server, thêm một cột KHÔNG ĐẦY ĐỦ với giá trị mặc định, có thể mất nhiều thời gian để hoàn thành và tạo nhiều bản ghi nhật ký. Chạy các câu lệnh ALTER TABLE này với sự cẩn thận giống như bất kỳ câu lệnh INSERT, UPDATE hoặc DELETE nào ảnh hưởng đến nhiều hàng.

Thêm NOT NULL cột làm thao tác trực tuyến

Bắt đầu với SQL Server 2012 (11.x) Enterprise Edition, việc thêm cột KHÔNG ĐẦY ĐỦ với giá trị mặc định là thao tác trực tuyến khi giá trị mặc định là hằng số thời gian chạy. Điều này có nghĩa là hoạt động được hoàn thành gần như ngay lập tức bất chấp số lượng hàng trong bảng, vì các hàng hiện có trong bảng không được cập nhật trong quá trình hoạt động. Thay vào đó, giá trị mặc định chỉ được lưu trữ trong siêu dữ liệu của bảng và giá trị được tra cứu, nếu cần, trong các truy vấn truy cập các hàng này. Hành vi này là tự động. Không cần thêm cú pháp nào để triển khai hoạt động trực tuyến ngoài cú pháp ADD COLUMN. Hằng số thời gian chạy là một biểu thức tạo ra cùng một giá trị tại thời gian chạy cho mỗi hàng trong bảng bất chấp tính xác định của nó. Ví dụ: biểu thức hằng "Dữ liệu tạm thời của tôi" hoặc hàm hệ thống GETUTCDATETIME () là hằng số thời gian chạy. Ngược lại, các hàm NEWID () hoặc NEWSEQUENTIALID () không phải là hằng số thời gian chạy, vì một giá trị duy nhất được tạo cho mỗi hàng trong bảng. Việc thêm cột KHÔNG ĐẦY ĐỦ với giá trị mặc định không phải là hằng số thời gian chạy sẽ luôn chạy ngoại tuyến và có khóa độc quyền (SCH-M) trong suốt thời gian hoạt động.

Trong khi các hàng hiện có tham chiếu đến giá trị được lưu trữ trong siêu dữ liệu, giá trị mặc định được lưu trữ trên hàng cho bất kỳ hàng mới nào được chèn và không chỉ định giá trị khác cho cột. Giá trị mặc định được lưu trữ trong siêu dữ liệu sẽ di chuyển đến hàng hiện có khi hàng được cập nhật (ngay cả khi cột thực không được chỉ định trong câu lệnh UPDATE) hoặc nếu bảng hoặc chỉ mục nhóm được tạo lại.

Các cột thuộc loại varchar (max) , nvarchar (max) , varbinary (max) , xml , văn bản , ntext , hình ảnh , phân cấp , hình học , địa lý Không thể thêm hoặc CLR UDTS trong một hoạt động trực tuyến. Không thể thêm cột trực tuyến nếu làm như vậy khiến kích thước hàng tối đa có thể vượt quá giới hạn 8.060 byte. Trong trường hợp này, cột được thêm vào dưới dạng hoạt động ngoại tuyến.

Thực hiện kế hoạch song song

Trong Microsoft SQL Server 2012 Enterprise trở lên, số lượng bộ xử lý được sử dụng để chạy một câu lệnh CONSTRAINT hoặc DROP (chỉ mục theo chỉ mục) CONSTRAINT hoặc DROP (chỉ mục được phân cụm) được xác định bởi mức độ song song tối đa tùy chọn cấu hình và khối lượng công việc hiện tại. Nếu Cơ sở dữ liệu phát hiện ra rằng hệ thống đang bận, mức độ song song của hoạt động sẽ tự động giảm trước khi bắt đầu thực thi câu lệnh. Bạn có thể cấu hình thủ công số lượng bộ xử lý được sử dụng để chạy câu lệnh bằng cách chỉ định tùy chọn MAXDOP. Để biết thêm thông tin, hãy xem Định cấu hình Tùy chọn cấu hình máy chủ song song mức độ tối đa .

Bảng được phân vùng

Ngoài việc thực hiện các thao tác SWITCH liên quan đến các bảng được phân vùng, hãy sử dụng ALTER TABLE để thay đổi trạng thái của các cột, ràng buộc và trình kích hoạt của một bảng được phân vùng giống như nó được sử dụng cho các bảng không được phân vùng. Tuy nhiên, không thể sử dụng câu lệnh này để thay đổi cách phân vùng bảng. Để phân vùng lại bảng đã phân vùng, hãy sử dụng ALTER PARTITION SCHEME ALTER PARTITION FUNCTION . Ngoài ra, bạn không thể thay đổi kiểu dữ liệu của một cột trong bảng được phân vùng.

Hạn chế đối với bảng có chế độ xem bị ràng buộc giản đồ

Các hạn chế áp dụng cho các câu lệnh ALTER TABLE trên các bảng có dạng xem liên kết với lược đồ cũng giống như các hạn chế hiện được áp dụng khi sửa đổi bảng với một chỉ mục đơn giản. Thêm một cột được cho phép. Tuy nhiên, không được phép xóa hoặc thay đổi cột tham gia vào bất kỳ chế độ xem có giới hạn giản đồ nào. Nếu câu lệnh ALTER TABLE yêu cầu thay đổi một cột được sử dụng trong dạng xem có giới hạn lược đồ, ALTER TABLE không thành công và Cơ sở dữ liệu đưa ra thông báo lỗi. Để biết thêm thông tin về liên kết lược đồ và các chế độ xem được lập chỉ mục, hãy xem TẠO CHẾ ĐỘ XEM .

Việc thêm hoặc xóa trình kích hoạt trên bảng cơ sở không bị ảnh hưởng bởi việc tạo chế độ xem liên kết giản đồ tham chiếu đến các bảng.

Chỉ mục và BẢNG BÁO CÁO

Các chỉ mục được tạo như một phần của ràng buộc sẽ bị loại bỏ khi loại bỏ ràng buộc. Chỉ mục được tạo bằng CREATE INDEX phải bị loại bỏ bằng DROP INDEX. Sử dụng câu lệnh ALTER INDEX để xây dựng lại một phần chỉ mục của định nghĩa ràng buộc; ràng buộc không cần phải bỏ đi và thêm lại bằng ALTER TABLE.

Tất cả các chỉ mục và ràng buộc dựa trên một cột phải được xóa trước khi có thể xóa cột đó.

Khi bạn xóa một ràng buộc đã tạo chỉ mục được phân nhóm, các hàng dữ liệu được lưu trữ trong cấp độ lá của chỉ mục được phân nhóm sẽ được lưu trữ trong một bảng không phân nhóm. Bạn có thể bỏ chỉ mục được phân nhóm và di chuyển bảng kết quả sang một nhóm tệp hoặc lược đồ phân vùng khác trong một giao dịch duy nhất bằng cách chỉ định tùy chọn CHUYỂN ĐẾN. Tùy chọn CHUYỂN ĐẾN có các hạn chế sau:

  • CHUYỂN ĐẾN không hợp lệ đối với các chế độ xem được lập chỉ mục hoặc các chỉ mục không hợp nhất.
  • Lược đồ phân vùng hoặc nhóm tệp phải đã tồn tại.
  • Nếu CHUYỂN ĐẾN không được chỉ định, bảng sẽ nằm trong cùng một lược đồ phân vùng hoặc nhóm tệp như đã được xác định cho chỉ mục nhóm.

Khi bạn thả một chỉ mục được nhóm lại, hãy chỉ định tùy chọn ONLINE ** = ** ON để giao dịch DROP INDEX không chặn các truy vấn và sửa đổi đối với dữ liệu cơ bản và các chỉ mục không phân nhóm được liên kết.

ONLINE = ON có các hạn chế sau:

  • ONLINE = ON không hợp lệ đối với các chỉ mục được nhóm cũng bị vô hiệu hóa. Chỉ mục bị vô hiệu hóa phải được loại bỏ bằng cách sử dụng ONLINE = TẮT.
  • Mỗi lần chỉ có thể bỏ một chỉ mục.
  • ONLINE = ON không hợp lệ đối với các chế độ xem được lập chỉ mục, chỉ mục không hợp nhất hoặc lập chỉ mục trên bảng tạm thời cục bộ.
  • ONLINE = ON không hợp lệ đối với các chỉ mục của columnstore.

Không gian đĩa tạm thời bằng với kích thước của chỉ mục nhóm hiện có được yêu cầu để giảm chỉ mục được phân nhóm. Không gian bổ sung này được giải phóng ngay sau khi hoạt động hoàn tất.

Lưu ý

Các tùy chọn được liệt kê trong & lt; drop_clustered_constraint_option & gt; áp dụng cho các chỉ mục nhóm trên bảng và không thể áp dụng cho các chỉ mục nhóm trên các chế độ xem hoặc các chỉ mục không hợp nhất.

Sao chép các thay đổi giản đồ

Theo mặc định, khi bạn chạy ALTER TABLE trên một bảng đã xuất bản tại SQL Server Publisher, thay đổi đó sẽ truyền đến tất cả Người đăng ký SQL Server. Chức năng này có một số hạn chế. Bạn có thể vô hiệu hóa nó. Để biết thêm thông tin, hãy xem Thực hiện thay đổi giản đồ trên cơ sở dữ liệu xuất bản .

Nén dữ liệu

Không thể bật bảng hệ thống để nén. Nếu bảng là một đống, hoạt động xây dựng lại cho chế độ ONLINE sẽ là một luồng. Sử dụng chế độ NGOẠI TUYẾN cho hoạt động xây dựng lại đống đa luồng. Để biết thêm thông tin về nén dữ liệu, hãy xem Nén dữ liệu .

Để đánh giá việc thay đổi trạng thái nén sẽ ảnh hưởng như thế nào đến bảng, chỉ mục hoặc phân vùng, hãy sử dụng quy trình được lưu trữ của hệ thống sp_estimate_data_compression_savings .

Các hạn chế sau áp dụng cho các bảng được phân vùng:

  • Bạn không thể thay đổi cài đặt nén của một phân vùng nếu bảng không có chỉ mục nào được đánh dấu.
  • Bảng ALTER TABLE & lt; table & gt; Cú pháp REBUILD PARTITION ... xây dựng lại phân vùng được chỉ định.
  • Bảng ALTER TABLE & lt; table & gt; Cú pháp REBUILD WITH ... sẽ xây dựng lại tất cả các phân vùng.

Giảm cột NTEXT

Khi loại bỏ các cột sử dụng kiểu dữ liệu NTEXT không được dùng nữa, việc dọn dẹp dữ liệu đã xóa diễn ra như một thao tác tuần tự trên tất cả các hàng. Việc dọn dẹp có thể đòi hỏi một lượng lớn thời gian. Khi thả cột NTEXT trong bảng có nhiều hàng, hãy cập nhật cột NTEXT thành giá trị NULL trước, sau đó thả cột. Bạn có thể chạy tùy chọn này với các thao tác song song và làm cho nó nhanh hơn nhiều.

Chỉ mục trực tuyến REBUILD

Để chạy câu lệnh DDL để xây dựng lại chỉ mục trực tuyến, tất cả các giao dịch chặn đang hoạt động chạy trên một bảng cụ thể phải được hoàn thành. Khi khởi chạy xây dựng lại chỉ mục trực tuyến, nó sẽ chặn tất cả các giao dịch mới sẵn sàng bắt đầu chạy trên bảng này. Mặc dù thời gian khóa để xây dựng lại chỉ mục trực tuyến là ngắn, nhưng việc chờ đợi tất cả các giao dịch đang mở trên một bảng nhất định hoàn tất và chặn các giao dịch mới bắt đầu, có thể ảnh hưởng đáng kể đến thông lượng. Điều này có thể khiến khối lượng công việc bị chậm lại hoặc hết thời gian và hạn chế đáng kể quyền truy cập vào bảng bên dưới. Tùy chọn WAIT_AT_LOW_PRIORITY cho phép các DBA quản lý các khóa S-lock và Sch-M cần thiết cho việc tạo lại chỉ mục trực tuyến. Trong cả ba trường hợp: KHÔNG, SELF và BLOCKERS, nếu trong thời gian chờ ( (MAX_DURATION = n [phút]) ) không có hoạt động chặn nào, việc xây dựng lại chỉ mục trực tuyến sẽ chạy ngay lập tức mà không cần chờ đợi và câu lệnh DDL đã hoàn thành.

Hỗ trợ khả năng tương thích

Câu lệnh ALTER TABLE chỉ hỗ trợ tên bảng hai phần ( schema.object ). Trong SQL Server, việc chỉ định tên bảng bằng các định dạng sau không thành công tại thời điểm biên dịch với lỗi 117.

  • server.database.schema.table
  • .database.schema.table
  • ..schema.table

Trong các phiên bản trước đó, việc chỉ định định dạng server.database.schema.table đã trả về lỗi 4902. Chỉ định định dạng .database.schema.table hoặc định dạng ..schema.table đã thành công.

Để giải quyết sự cố, hãy xóa việc sử dụng tiền tố bốn phần.

Quyền

Yêu cầu quyền ALTER trên bảng.

Quyền ALTER TABLE áp dụng cho cả hai bảng có liên quan đến câu lệnh ALTER TABLE SWITCH. Bất kỳ dữ liệu nào được chuyển đổi đều kế thừa tính bảo mật của bảng đích.

Nếu bạn đã xác định bất kỳ cột nào trong câu lệnh ALTER TABLE thuộc loại dữ liệu bí danh hoặc kiểu thời gian chạy ngôn ngữ chung (CLR) do người dùng xác định hoặc kiểu dữ liệu bí danh, thì cần có quyền REFERENCES đối với loại này.

Việc thêm hoặc thay đổi cột cập nhật các hàng của bảng yêu cầu quyền CẬP NHẬT trên bảng. Ví dụ: thêm cột KHÔNG ĐẦY ĐỦ với giá trị mặc định hoặc thêm cột nhận dạng khi bảng không trống.

Ví dụ

Thêm cột và ràng buộc

Các ví dụ trong phần này minh họa việc thêm cột và ràng buộc vào bảng.

A. Thêm một cột mới

Ví dụ sau thêm một cột cho phép giá trị rỗng và không có giá trị nào được cung cấp thông qua định nghĩa DEFAULT. Trong cột mới, mỗi hàng sẽ có NULL .

  TẠO BẢNG dbo.doc_exa (column_a INT);
ĐI
ALTER TABLE dbo.doc_exa THÊM cột_b VARCHAR (20) NULL;
ĐI
 

B. Thêm một cột có ràng buộc

Ví dụ sau thêm một cột mới với ràng buộc UNIQUE .

  TẠO BẢNG dbo.doc_exc (column_a INT);
ĐI
ALTER TABLE dbo.doc_exc ADD column_b VARCHAR (20) NULL
    CONSTRAINT exb_unique DUY NHẤT;
ĐI
EXEC sp_help doc_exc;
ĐI
DROP BẢNG dbo.doc_exc;
ĐI
 

C. Thêm ràng buộc CHECK chưa được xác minh vào cột hiện có

Ví dụ sau đây thêm một ràng buộc vào một cột hiện có trong bảng. Cột có giá trị vi phạm ràng buộc. Do đó, WITH NOCHECK được sử dụng để ngăn ràng buộc được xác thực với các hàng hiện có và cho phép thêm ràng buộc.

  TẠO BẢNG dbo.doc_exd (column_a INT);
ĐI
CHÈN VÀO GIÁ TRỊ dbo.doc_exd (-1);
ĐI
BẢNG ALTER dbo.doc_exd VỚI KIỂM TRA
THÊM CÔNG CHỨNG exd_check KIỂM TRA (column_a & gt; 1);
ĐI
EXEC sp_help doc_exd;
ĐI
DROP BẢNG dbo.doc_exd;
ĐI
 

D. Thêm ràng buộc DEFAULT vào cột hiện có

Ví dụ sau tạo một bảng có hai cột và chèn một giá trị vào cột đầu tiên, và cột còn lại vẫn là NULL. Ràng buộc DEFAULT sau đó được thêm vào cột thứ hai. Để xác minh rằng giá trị mặc định được áp dụng, một giá trị khác được chèn vào cột đầu tiên và bảng được truy vấn.

  TẠO BẢNG dbo.doc_exz (column_a INT, column_b INT);
ĐI
CHÈN VÀO Dbo.doc_exz (cột_a) GIÁ TRỊ (7);
ĐI
BẢNG ALTER dbo.doc_exz
  THÊM CONSTRAINT col_b_def
  DEFAULT 50 CHO cột_b;
ĐI
CHÈN VÀO Dbo.doc_exz (cột_a) GIÁ TRỊ (10);
ĐI
CHỌN * TỪ dbo.doc_exz;
ĐI
DROP BẢNG dbo.doc_exz;
ĐI
 

E. Thêm một số cột có ràng buộc

Ví dụ sau đây thêm một số cột với các ràng buộc được xác định với cột mới. Cột mới đầu tiên có thuộc tính IDENTITY . Mỗi hàng trong bảng có các giá trị gia tăng mới trong cột nhận dạng.

  TẠO BẢNG dbo.doc_exe (column_a INT CONSTRAINT column_a_un UNIQUE);
ĐI
BẢNG ALTER dbo.doc_exe THÊM

- Thêm cột nhận dạng CHÍNH CHÍNH.
column_b INT IDENTITY
CONSTRAINT column_b_pk KEY CHÍNH,

- Thêm một cột tham chiếu đến một cột khác trong cùng một bảng.
column_c INT NULL
CONSTRAINT column_c_fk
THAM KHẢO doc_exe (column_a),

- Thêm một cột có ràng buộc để thực thi điều đó
- dữ liệu không đầy đủ ở định dạng số điện thoại hợp lệ.
cột_d VARCHAR (16) NULL
CONSTRAINT column_d_chk
KIỂM TRA
(column_d LIKE '[0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [0-9]' HOẶC
cột_d LIKE
'([0-9] [0-9] [0-9]) [0-9] [0-9] [0-9] - [0-9] [0-9] [0-9] [ 0-9] '),

- Thêm một cột không rỗng với giá trị mặc định.
column_e DECIMAL (3,3)
CONSTRAINT column_e_default
ĐỊNH NGHĨA .081;
ĐI
EXEC sp_help doc_exe;
ĐI
DROP BẢNG dbo.doc_exe;
ĐI
 

F. Thêm một cột có thể nullable với các giá trị mặc định

Ví dụ sau thêm một cột có giá trị rỗng với định nghĩa DEFAULT và sử dụng WITH VALUES để cung cấp giá trị cho mỗi hàng hiện có trong bảng. Nếu WITH VALUES không được sử dụng, mỗi hàng có giá trị NULL trong cột mới.

  TẠO BẢNG dbo.doc_exf (column_a INT);
ĐI
CHÈN VÀO GIÁ TRỊ dbo.doc_exf (1);
ĐI
BẢNG ALTER dbo.doc_exf
THÊM AddDate smalldatetime NULL
CONSTRAINT AddDateDflt
DEFAULT GETDATE () VỚI CÁC GIÁ TRỊ;
ĐI
DROP BẢNG dbo.doc_exf;
ĐI
 

G. Tạo ràng buộc CHÍNH CHÍNH với các tùy chọn nén chỉ mục hoặc dữ liệu

Ví dụ sau tạo ràng buộc KHÓA CHÍNH PK_TransactionHistoryArchive_TransactionID và đặt các tùy chọn FILLFACTOR , ONLINE PAD_INDEX . Chỉ mục được phân nhóm kết quả sẽ có cùng tên với ràng buộc.

Áp dụng cho : SQL Server 2008 trở lên và Cơ sở dữ liệu Azure SQL.

  SỬ DỤNG AdventureWorks;
ĐI
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK
THÊM CONSTRAINT PK_TransactionHistoryArchive_TransactionID KHÓA CHÍNH ĐÃ ĐƯỢC CẬP NHẬT (TransactionID)
VỚI (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON);
ĐI
 

Ví dụ tương tự này áp dụng tính năng nén trang trong khi áp dụng khóa chính theo nhóm.

  SỬ DỤNG AdventureWorks;
ĐI
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK
THÊM CONSTRAINT PK_TransactionHistoryArchive_TransactionID KHÓA CHÍNH ĐÃ ĐƯỢC CẬP NHẬT (TransactionID)
VỚI (DATA_COMPRESSION = PAGE);
ĐI
 

H. Thêm một cột thưa thớt

Các ví dụ sau cho thấy việc thêm và sửa đổi các cột thưa thớt trong bảng T1. Mã để tạo bảng T1 như sau.

  TẠO BẢNG T1 (
  C1 INT PRIMARY KEY,
  C2 VARCHAR (50) SPARSE NULL,
  C3 INT SPARSE NULL,
  C4 INT);
ĐI
 

Để thêm một cột thưa thớt bổ sung C5 , hãy thực hiện câu lệnh sau.

  BẢNG ALTER T1
THÊM C5 CHAR (100) SPARSE NULL;
ĐI
 

Để chuyển đổi cột không thưa thớt C4 thành cột thưa thớt, hãy thực hiện câu lệnh sau.

  BẢNG ALTER T1
ALTER COLUMN C4 ADD SPARSE;
ĐI
 

Để chuyển đổi cột thưa C4 thành cột không phân tách, hãy thực hiện câu lệnh sau.

  BẢNG ALTER T1
ALTER CỘT C4 DROP SPARSE;
ĐI
 

Tôi. Thêm tập hợp cột

Các ví dụ sau cho thấy việc thêm một cột vào bảng T2 . Không thể thêm tập hợp cột vào bảng đã chứa các cột thưa thớt. Mã để tạo bảng T2 như sau.

 TẠO BẢNG T2 (
  C1 INT PRIMARY KEY,
  C2 VARCHAR (50) KHÔNG ĐỦ,
  C3 INT NULL,
  C4 INT);
ĐI
 

Ba câu lệnh sau đây thêm một tập hợp cột có tên CS , sau đó sửa đổi các cột C2 C3 thành SPARSE.

  BẢNG ALTER T2
THÊM CS XML COLUMN_SET CHO ALL_SPARSE_COLUMNS;
ĐI

BẢNG ALTER T2
ALTER COLUMN C2 ADD SPARSE;
ĐI

BẢNG ALTER T2
ALTER COLUMN C3 THÊM SPARSE;
ĐI
 

J. Thêm một cột được mã hóa

Câu lệnh sau thêm một cột được mã hóa có tên là PromotionCode .

  BẢNG ALTER Khách hàng THÊM
    Mã khuyến mãi nvarchar (100)
    THƯỞNG THỨC VỚI (COLUMN_ENCRYPTION_KEY = MyCEK,
    ENCRYPTION_TYPE = RANDOMIZED,
    ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256');
 

K. Thêm khóa chính với hoạt động có thể tiếp tục

Hoạt động ALTER TABLE có thể tiếp tục để thêm khóa chính được nhóm trên cột (a) với MAX_DURATION trong 240 phút.

  ALTER TABLE table1
ADD CONSTRAINT PK_Constrain CHÌA KHÓA CHÍNH ĐƯỢC ĐIỀU CHỈNH (a)
VỚI (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
 

Bỏ cột và ràng buộc

Các ví dụ trong phần này minh họa việc giảm các cột và ràng buộc.

A. Bỏ một cột hoặc nhiều cột

Ví dụ đầu tiên sửa đổi một bảng để xóa một cột. Ví dụ thứ hai loại bỏ nhiều cột.

  TẠO BẢNG dbo.doc_exb (
     column_a INT,
     cột_b VARCHAR (20) NULL,
     column_c DATETIME,
     cột_d INT);
ĐI
- Loại bỏ một cột duy nhất.
ALTER TABLE dbo.doc_exb DROP COLUMN column_b;
ĐI
- Loại bỏ nhiều cột.
ALTER TABLE dbo.doc_exb DROP COLUMN column_c, column_d;
 

B. Bỏ các ràng buộc và cột

Ví dụ đầu tiên loại bỏ ràng buộc UNIQUE khỏi bảng. Ví dụ thứ hai loại bỏ hai ràng buộc và một cột duy nhất.

  TẠO BẢNG dbo.doc_exc (column_a INT NOT NULL CONSTRAINT my_constraint UNIQUE);
ĐI

- Ví dụ 1. Loại bỏ một ràng buộc duy nhất.
ALTER TABLE dbo.doc_exc DROP my_constraint;
ĐI

DROP BẢNG dbo.doc_exc;
ĐI

TẠO BẢNG dbo.doc_exc (column_a INT
                          NOT NULL CONSTRAINT my_constraint UNIQUE
                          , column_b INT
                          NOT NULL CONSTRAINT my_pk_constraint KEY CHÍNH XÁC);
ĐI

- Ví dụ 2. Bỏ hai ràng buộc và một cột
- Từ khóa CONSTRAINT là tùy chọn. Từ khóa COLUMN là bắt buộc.
BẢNG ALTER dbo.doc_exc
DROP CONSTRAINT my_constraint, my_pk_constraint, COLUMN column_b;
ĐI
 

C. Bỏ ràng buộc KHÓA CHÍNH ở chế độ TRỰC TUYẾN

Ví dụ sau đây xóa ràng buộc KHÓA CHÍNH với tùy chọn ONLINE được đặt thành ON .

  ALTER TABLE Production.TransactionHistoryArchive
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
VỚI (ONLINE = BẬT);
ĐI
 

D. Thêm và bỏ ràng buộc NGOẠI KHÓA

Ví dụ sau tạo bảng ContactBackup , sau đó thay đổi bảng, trước tiên bằng cách thêm ràng buộc FOREIGN KEY tham chiếu đến bảng Person.Person , sau đó bỏ ràng buộc FOREIGN KEY .

  TẠO BẢNG Person.ContactBackup
    (ID liên hệ INT);
ĐI

ALTER TABLE Person.ContactBackup
ADD CONSTRAINT FK_ContactBackup_Contact FOREIGN KEY (ContactID)
    TÀI LIỆU THAM KHẢO Person.Person (BusinessEntityID);
ĐI

ALTER TABLE Person.ContactBackup
DROP CONSTRAINT FK_ContactBackup_Contact;
ĐI

DROP TABLE Person.ContactBackup;
 

Thay đổi định nghĩa cột

A. Thay đổi kiểu dữ liệu của cột

Ví dụ sau thay đổi một cột của bảng từ INT thành DECIMAL .

  TẠO BẢNG dbo.doc_exy (column_a INT);
ĐI
CHÈN VÀO dbo.doc_exy (cột_a) GIÁ TRỊ (10);
ĐI
ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2);
ĐI
DROP BẢNG dbo.doc_exy;
ĐI
 

B. Thay đổi kích thước của cột

Ví dụ sau đây tăng kích thước của cột varchar cũng như độ chính xác và tỷ lệ của cột thập phân . Bởi vì các cột chứa dữ liệu, kích thước cột chỉ có thể được tăng lên. Cũng lưu ý rằng col_a được xác định trong một chỉ mục duy nhất. Kích thước của col_a vẫn có thể được tăng lên vì kiểu dữ liệu là varchar và chỉ mục không phải là kết quả của ràng buộc CHÍNH CHÍNH.

  - Tạo một bảng hai cột với một chỉ mục duy nhất trên cột varchar.
TẠO BẢNG dbo.doc_exy (col_a varchar (5) DUY NHẤT KHÔNG ĐẦY ĐỦ, số thập phân col_b (4,2));
ĐI
CHÈN VÀO GIÁ TRỊ dbo.doc_exy ('Kiểm tra', 99,99);
ĐI
- Xác minh kích thước cột hiện tại.
CHỌN tên, TYPE_NAME (system_type_id), max_length, precision, scale
FROM sys.columns WHERE object_id = OBJECT_ID (N'dbo.doc_exy ');
ĐI
- Tăng kích thước của cột varchar.
BẢNG ALTER dbo.doc_exy ALTER COLUMN col_a varchar (25);
ĐI
- Tăng tỷ lệ và độ chính xác của cột thập phân.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_b decimal (10,4);
ĐI
- Chèn một hàng mới.
CHÈN VÀO GIÁ TRỊ dbo.doc_exy ('MyNewColumnSize', 99999.9999);
ĐI
- Xác minh kích thước cột hiện tại.
CHỌN tên, TYPE_NAME (system_type_id), max_length, precision, scale
FROM sys.columns WHERE object_id = OBJECT_ID (N'dbo.doc_exy ');
 

C. Thay đổi đối chiếu cột

Ví dụ sau đây cho thấy cách thay đổi đối chiếu của một cột. Đầu tiên, một bảng được tạo bảng với sự đối chiếu mặc định của người dùng.

  TẠO BẢNG T3 (
  C1 INT PRIMARY KEY,
  C2 VARCHAR (50) KHÔNG ĐỦ,
  C3 INT NULL,
  C4 INT);
ĐI
 

Tiếp theo, đối chiếu cột C2 được đổi thành Latin1_General_BIN. Loại dữ liệu là bắt buộc, mặc dù nó không được thay đổi.

  ALTER TABLE T3
ALTER COLUMN C2 varchar (50) COLLATE Latin1_General_BIN;
ĐI
 

D. Mã hóa một cột

Ví dụ sau đây cho biết cách mã hóa một cột bằng cách sử dụng Luôn được mã hóa bằng các vùng bảo mật .

Đầu tiên, một bảng được tạo mà không có bất kỳ cột nào được mã hóa.

  TẠO BẢNG T3 (
  C1 INT PRIMARY KEY,
  C2 VARCHAR (50) KHÔNG ĐỦ,
  C3 INT NULL,
  C4 INT);
ĐI
 

Tiếp theo, cột 'C2' được mã hóa bằng khóa mã hóa cột, có tên là CEK1 và mã hóa ngẫu nhiên. Để câu lệnh sau thành công:

  • Khóa mã hóa cột phải được bật mã hóa. Có nghĩa là, nó phải được mã hóa bằng khóa chính của cột cho phép tính toán mã hóa.
  • Phiên bản SQL Server đích phải hỗ trợ Luôn được mã hóa bằng các vùng bảo mật.
  • Câu lệnh phải được phát hành qua kết nối được thiết lập cho Luôn được mã hóa bằng các vùng bảo mật và sử dụng trình điều khiển ứng dụng khách được hỗ trợ.
  • Ứng dụng gọi điện phải có quyền truy cập vào khóa chính của cột, bảo vệ CEK1 .
  ALTER TABLE T3
BIẾN ĐỔI ALTER COLUMN C2 (50) ĐÃ ĐƯỢC CẬP NHẬT
WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Ngẫu nhiên hóa, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL;
ĐI
 

Thay đổi định nghĩa bảng

Các ví dụ trong phần này trình bày cách thay đổi định nghĩa của bảng.

A. Sửa đổi bảng để thay đổi độ nén

Ví dụ sau thay đổi việc nén một bảng không phân vùng. Chỉ mục đống hoặc nhóm sẽ được xây dựng lại. Nếu bảng là một heap, thì tất cả các chỉ mục không gộp lại sẽ được tạo lại.

  BẢNG ALTER T1
REBUILD WITH (DATA_COMPRESSION = PAGE);
 

Ví dụ sau thay đổi việc nén một bảng được phân vùng. Cú pháp REBUILD PARTITION = 1 chỉ khiến số phân vùng 1 được tạo lại.

Áp dụng cho : SQL Server 2008 trở lên và Cơ sở dữ liệu Azure SQL.

  ALTER TABLE PartitionTable1
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = NONE);
ĐI
 

Thao tác tương tự sử dụng cú pháp thay thế sau đây sẽ tạo lại tất cả các phân vùng trong bảng.

Áp dụng cho : SQL Server 2008 trở lên và Cơ sở dữ liệu Azure SQL.

  ALTER TABLE PartitionTable1
REBUILD PARTITION = TẤT CẢ
VỚI (DATA_COMPRESSION = TRANG TRÊN CÁC PHẦN (1));
 

Để biết thêm các ví dụ về nén dữ liệu, hãy xem Nén dữ liệu .

B. Sửa đổi bảng cột lưu trữ để thay đổi nén lưu trữ

Ví dụ sau đây nén thêm một phân vùng bảng cột bằng cách áp dụng một thuật toán nén bổ sung. Việc nén này làm giảm kích thước bảng xuống một kích thước nhỏ hơn, nhưng cũng làm tăng thời gian cần thiết để lưu trữ và truy xuất. Điều này hữu ích cho việc lưu trữ hoặc cho các tình huống cần ít dung lượng hơn và có thể dành nhiều thời gian hơn để lưu trữ và truy xuất.

Áp dụng cho : SQL Server 2014 (12.x) trở lên và Cơ sở dữ liệu Azure SQL.

  ALTER TABLE PartitionTable1
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);
ĐI
 

Ví dụ sau giải nén một phân vùng bảng trong cột đã được nén bằng tùy chọn COLUMNSTORE_ARCHIVE. Khi dữ liệu được khôi phục, dữ liệu sẽ tiếp tục được nén bằng cách nén columnstore được sử dụng cho tất cả các bảng columnstore.

Áp dụng cho : SQL Server 2014 (12.x) trở lên và Cơ sở dữ liệu Azure SQL.

  ALTER TABLE PartitionTable1
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = COLUMNSTORE);
ĐI
 

C. Chuyển đổi phân vùng giữa các bảng

Ví dụ sau tạo một bảng được phân vùng, giả sử rằng lược đồ phân vùng myRangePS1 đã được tạo trong cơ sở dữ liệu. Tiếp theo, một bảng không được phân vùng được tạo với cấu trúc giống như bảng được phân vùng và trên cùng một nhóm tệp với PARTITION 2 của bảng PartitionTable . Dữ liệu của PARTITION 2 của bảng PartitionTable sau đó được chuyển thành bảng NonPartitionTable .

  TẠO BẢNG PartitionTable (col1 INT, col2 CHAR (10))
TRÊN myRangePS1 (col1);
ĐI
TẠO BẢNG NonPartitionTable (col1 INT, col2 CHAR (10))
TRÊN test2fg;
ĐI
ALTER TABLE PartitionTable CHUYỂN ĐỔI PHẦN 2 THÀNH NonPartitionTable;
ĐI
 

D. Cho phép khóa leo thang trên các bảng được phân vùng

Ví dụ sau cho phép khóa chuyển sang cấp độ phân vùng trên một bảng được phân vùng. Nếu bảng không được phân vùng, báo cáo khóa được đặt ở cấp BẢNG.

Áp dụng cho : SQL Server 2008 trở lên và Cơ sở dữ liệu Azure SQL.

  ALTER TABLE dbo.T1 SET (LOCK_ESCALATION = AUTO);
ĐI
 

E. Định cấu hình theo dõi thay đổi trên bảng

Ví dụ sau cho phép theo dõi thay đổi trên bảng Person.Person .

Áp dụng cho : SQL Server 2008 trở lên và Cơ sở dữ liệu Azure SQL.

  SỬ DỤNG AdventureWorks;
ALTER TABLE Person.Person
BẬT CHANGE_TRACKING;
 

Ví dụ sau cho phép theo dõi thay đổi và cho phép theo dõi các cột được cập nhật trong quá trình thay đổi.

Áp dụng cho : SQL Server 2008 trở lên.

  SỬ DỤNG AdventureWorks;
ĐI
ALTER TABLE Person.Person
BẬT CHANGE_TRACKING
VỚI (TRACK_COLUMNS_UPDATED = BẬT)
 

Ví dụ sau vô hiệu hóa theo dõi thay đổi trên bảng Person.Person .

Áp dụng cho : SQL Server 2008 trở lên và Cơ sở dữ liệu Azure SQL.

  SỬ DỤNG AdventureWorks;
ĐI
ALTER TABLE Person.Person
TẮT THAY ĐỔI_TRACKING;
 

Tắt và bật các ràng buộc và trình kích hoạt

A. Tắt và bật lại một ràng buộc

Ví dụ sau vô hiệu hóa một ràng buộc giới hạn mức lương được chấp nhận trong dữ liệu. NOCHECK CONSTRAINT được sử dụng với ALTER TABLE để vô hiệu hóa ràng buộc và cho phép chèn một đoạn thường vi phạm ràng buộc. CHECK CONSTRAINT bật lại ràng buộc.

  TẠO BẢNG dbo.cnst_example (
  id INT NOT NULL,
  tên VARCHAR (10) KHÔNG ĐỦ,
  lương TIỀN KHÔNG ĐẦY ĐỦ
  CONSTRAINT lương_cấp_cấp (lương & lt; 100000));

- Phụ trang hợp lệ
CHÈN VÀO GIÁ TRỊ dbo.cnst_example (1, 'Joe Brown', 65000);
CHÈN VÀO GIÁ TRỊ dbo.cnst_example (2, 'Mary Smith', 75000);

- Chèn này vi phạm ràng buộc.
CHÈN VÀO GIÁ TRỊ dbo.cnst_example (3, 'Pat Jones', 105000);

- Vô hiệu hóa ràng buộc và thử lại.
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT lương_cap;
CHÈN VÀO GIÁ TRỊ dbo.cnst_example (3, 'Pat Jones', 105000);

- Bật lại ràng buộc và thử chèn khác; điều này sẽ thất bại.
ALTER TABLE dbo.cnst_example KIỂM TRA CONSTRAINT lương_cấp;
CHÈN VÀO GIÁ TRỊ dbo.cnst_example (4, 'Eric James', 110000);
 

B. Tắt và bật lại trình kích hoạt

Ví dụ sau sử dụng tùy chọn DISABLE TRIGGER của ALTER TABLE để vô hiệu hóa trình kích hoạt và cho phép chèn một đoạn thường vi phạm trình kích hoạt. Sau đó, ENABLE TRIGGER được sử dụng để bật lại trình kích hoạt.

 TẠO BẢNG dbo.trig_example (
  id INT,
  tên VARCHAR (12),
  tiền lương);
ĐI
- Tạo trình kích hoạt.
TẠO TRIGGER dbo.trig1 TRÊN dbo.trig_example ĐỂ CHÈN
BẰNG 
IF (CHỌN ĐẾM (*) TỪ ĐƯỢC CHÈN
Lương TẠI ĐÂU & gt; 100000) & gt; 0
BẮT ĐẦU
    print 'Lỗi TRIG1: ​​bạn đã cố gắng chèn lương & gt; 100.000 đô la '
    GIAO DỊCH ROLLBACK
CHẤM DỨT ;
ĐI
- Thử một phụ trang vi phạm trình kích hoạt.
CHÈN VÀO GIÁ TRỊ dbo.trig_example (1, 'Pat Smith', 100001);
ĐI
- Vô hiệu hóa trình kích hoạt.
ALTER TABLE dbo.trig_example DISABLE TRIGGER trig1;
ĐI
- Hãy thử một đoạn chèn thường vi phạm trình kích hoạt.
CHÈN VÀO GIÁ TRỊ dbo.trig_example (2, 'Chuck Jones', 100001);
ĐI
- Bật lại trình kích hoạt.
ALTER TABLE dbo.trig_example BẬT MẠNG TRIGGER trig1;
ĐI
- Thử một phụ trang vi phạm trình kích hoạt.
CHÈN VÀO GIÁ TRỊ dbo.trig_example (3, 'Mary Booth', 100001);
ĐI
 

Hoạt động trực tuyến

A. Xây dựng lại chỉ mục trực tuyến bằng cách sử dụng các tùy chọn chờ mức độ ưu tiên thấp

Ví dụ sau đây cho thấy cách thực hiện xây dựng lại chỉ mục trực tuyến chỉ định các tùy chọn chờ mức độ ưu tiên thấp.

Áp dụng cho : SQL Server 2014 (12.x) trở lên và Cơ sở dữ liệu Azure SQL.

  BẢNG ALTER T1
TÁI TẠO VỚI
(
    PAD_INDEX = BẬT,
    ONLINE = ON (WAIT_AT_LOW_PRIORITY (MAX_DURATION = 4 MINUTES,
                                         ABORT_AFTER_WAIT = BLOCKERS))
);
 

B. Cột thay đổi trực tuyến

Ví dụ sau đây cho thấy cách chạy thao tác cột thay thế với tùy chọn ONLINE.

Áp dụng cho : SQL Server 2016 (13.x) trở lên và Cơ sở dữ liệu Azure SQL.

  TẠO BẢNG dbo.doc_exy (column_a INT);
ĐI
CHÈN VÀO dbo.doc_exy (cột_a) GIÁ TRỊ (10);
ĐI
BẢNG ALTER dbo.doc_exy
    ALTER COLUMN column_a DECIMAL (5, 2) WITH (ONLINE = ON);
ĐI
sp_help doc_exy;
DROP BẢNG dbo.doc_exy;
ĐI
 

Lập phiên bản hệ thống

Bốn ví dụ sau sẽ giúp bạn làm quen với cú pháp để sử dụng lập phiên bản hệ thống. Để được hỗ trợ thêm, hãy xem Bắt đầu với Bảng tạm thời do hệ thống tạo phiên bản .

Áp dụng cho : SQL Server 2016 (13.x) trở lên và Cơ sở dữ liệu Azure SQL.

A. Thêm phiên bản hệ thống vào các bảng hiện có

Ví dụ sau đây cho thấy cách thêm lập phiên bản hệ thống vào bảng hiện có và tạo bảng lịch sử trong tương lai. Ví dụ này giả định rằng có một bảng hiện có được gọi là InsurancePolicy với khóa chính được xác định. Ví dụ này điền các cột khoảng thời gian mới được tạo để lập phiên bản hệ thống bằng cách sử dụng các giá trị mặc định cho thời gian bắt đầu và kết thúc vì các giá trị này không được để trống. Ví dụ này sử dụng mệnh đề HIDDEN để đảm bảo không ảnh hưởng đến các ứng dụng hiện có tương tác với bảng hiện tại. Nó cũng sử dụng HISTORY_RETENTION_PERIOD chỉ khả dụng trên Cơ sở dữ liệu SQL.

  - Thay thế bảng phi thời gian để xác định các khoảng thời gian cho việc lập phiên bản hệ thống
ALTER TABLE Bảo hiểm Chính sách
THÊM THỜI GIAN CHO SYSTEM_TIME (ValidFrom, ValidTo),
ValidTừ datetime2 ĐƯỢC TẠO LUÔN KHI ROW BẮT ĐẦU CHƯA TỪNG ĐẦY ĐỦ
    DEFAULT SYSUTCDATETIME (),
Hợp lệ
    CHUYỂN ĐỔI DEFAULT (DATETIME2, '9999-12-31 23: 59: 59.99999999');

- Kích hoạt phiên bản hệ thống với thời gian lưu giữ 1 năm đối với dữ liệu lịch sử
ALTER TABLE Bảo hiểm Chính sách
SET (SYSTEM_VERSIONING = ON (HISTORY_RETENTION_PERIOD = 1 YEAR));
 

B. Di chuyển một giải pháp hiện có để sử dụng lập phiên bản hệ thống

Ví dụ sau đây cho thấy cách chuyển sang lập phiên bản hệ thống từ một giải pháp sử dụng trình kích hoạt để bắt chước hỗ trợ tạm thời. Ví dụ giả sử có một giải pháp hiện có sử dụng bảng ProjectTask và bảng ProjectTaskHistory cho giải pháp hiện có của nó, giải pháp đó sử dụng Changed Date Các cột Ngày sửa đổi cho các khoảng thời gian của nó, rằng các cột khoảng thời gian này không sử dụng kiểu dữ liệu datetime2 và bảng ProjectTask có khóa chính được xác định.

 - Bỏ trình kích hoạt hiện có
DROP TRIGGER ProjectTask_HistoryTrigger;

- Điều chỉnh lược đồ cho bảng hiện tại và lịch sử
- Thay đổi kiểu dữ liệu cho các cột thời kỳ hiện có
ALTER TABLE ProjectTask ALTER COLUMN [Changed Date] datetime2 NOT NULL;
ALTER TABLE ProjectTask ALTER COLUMN [Ngày sửa đổi] datetime2 NOT NULL;
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Changed Date] datetime2 NOT NULL;
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Ngày sửa đổi] datetime2 NOT NULL;

- Thêm khoảng thời gian SYSTEM_TIME và thiết lập phiên bản hệ thống với việc liên kết hai bảng hiện có
- (một số kiểm tra dữ liệu nhất định diễn ra trong nền)
ALTER TABLE ProjectTask
THÊM THỜI GIAN CHO SYSTEM_TIME ([Ngày đã thay đổi], [Ngày sửa đổi])

ALTER TABLE ProjectTask
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.ProjectTaskHistory, DATA_CONSISTENCY_CHECK = ON))
 

C. Tắt và bật lại lập phiên bản hệ thống để thay đổi giản đồ bảng

Ví dụ này cho thấy cách tắt lập phiên bản hệ thống trên bảng Department , thêm cột và bật lại lập phiên bản hệ thống. Việc tắt lập phiên bản hệ thống là bắt buộc để sửa đổi giản đồ bảng. Thực hiện các bước này trong một giao dịch để ngăn cập nhật cho cả hai bảng trong khi cập nhật giản đồ bảng, điều này cho phép DBA bỏ qua kiểm tra tính nhất quán dữ liệu khi bật lại phiên bản hệ thống và đạt được lợi ích về hiệu suất. Các tác vụ như tạo thống kê, chuyển đổi phân vùng hoặc áp dụng nén cho một hoặc cả hai bảng không yêu cầu tắt lập phiên bản hệ thống.

  BẮT ĐẦU
/ * Thực hiện khóa lược đồ trên cả hai bảng * /
Bộ phận ALTER TABLE
    SET (SYSTEM_VERSIONING = OFF);
/ * mở rộng lược đồ bảng cho bảng tạm thời * /
Bộ phận ALTER TABLE
     THÊM Col5 int NOT NULL DEFAULT 0;
/ * Mở rộng lược đồ bảng cho bảng lịch sử * /
ALTER TABLE Bộ phận
    THÊM Col5 int NOT NULL DEFAULT 0;
/ * Thiết lập lại lập phiên bản một lần nữa * /
Bộ phận ALTER TABLE
    SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.DepartmentHistory,
                                 DATA_CONSISTENCY_CHECK = TẮT));
LÀM
 

D. Xóa lập phiên bản hệ thống

Ví dụ này cho thấy cách xóa hoàn toàn việc lập phiên bản hệ thống khỏi bảng Phòng ban và bỏ bảng Danh sách phòng ban . Theo tùy chọn, bạn cũng có thể muốn bỏ các cột chu kỳ được hệ thống sử dụng để ghi lại thông tin lập phiên bản hệ thống. Bạn không thể bỏ bảng Department hoặc DepartmentHistory khi đã bật phiên bản hệ thống.

  ALTER TABLE Bộ phận
    SET (SYSTEM_VERSIONING = OFF);
Bộ phận ALTER TABLE
DROP THỜI GIAN CHO SYSTEM_TIME;
DROP TABLE DepartmentHistory;
 

Ví dụ: Phân tích Azure Synapse và Hệ thống Nền tảng Analytics (PDW)

Các ví dụ sau từ A đến C sử dụng bảng FactResellerSales trong cơ sở dữ liệu AdventureWorksPDW2012 .

A. Xác định xem bảng có được phân vùng không

Truy vấn sau trả về một hoặc nhiều hàng nếu bảng FactResellerSales được phân vùng. Nếu bảng không được phân vùng, không có hàng nào được trả về.

  CHỌN * TỪ sys.partitions AS p
THAM GIA sys.tables AS t
    BẬT p.object_id = t.object_id
Ở đâu p.partition_id KHÔNG ĐẦY ĐỦ
    AND t.name = 'FactResellerSales';
 

B. Xác định giá trị ranh giới cho bảng được phân vùng

Truy vấn sau đây trả về các giá trị ranh giới cho mỗi phân vùng trong bảng FactResellerSales .

  CHỌN t.name AS TableName, i.name AS IndexName, p.partition_number,
    p.partition_id, i.data_space_id, f. functions_id, f.type_desc,
    r.boundary_id, r.value AS BoundaryValue
TỪ sys.tables AS t
THAM GIA sys.indexes AS tôi
    BẬT t.object_id = i.object_id
THAM GIA sys.partitions AS p
    BẬT i.object_id = p.object_id VÀ i.index_id = p.index_id
THAM GIA sys.partition_schemes AS s
    BẬT i.data_space_id = s.data_space_id
THAM GIA sys.partition_functions AS f
    BẬT s. Chức năng_id = f. Chức năng_id
THAM GIA TRÁI sys.partition_range_values ​​AS r
    BẬT f. Chức năng_id = r. Chức năng_id và r.boundary_id = p.partition_number
WHERE t.name = 'FactResellerSales' VÀ i.type & lt; = 1
ĐẶT HÀNG THEO p.partition_number;
 

C. Xác định cột phân vùng cho bảng được phân vùng

Truy vấn sau trả về tên của cột phân vùng cho bảng. FactResellerSales .

 CHỌN t.object_id AS Object_ID, t.name AS TableName,
    ic.column_id as PartitioningColumnID, c.name AS PartitioningColumnName
TỪ sys.tables AS t
THAM GIA sys.indexes AS tôi
    BẬT t.object_id = i.object_id
THAM GIA sys.columns NHƯ c
    BẬT t.object_id = c.object_id
THAM GIA sys.partition_schemes NHƯ ps
    BẬT ps.data_space_id = i.data_space_id
THAM GIA sys.index_columns AS ic
    BẬT ic.object_id = i.object_id
    AND ic.index_id = i.index_id VÀ ic.partition_ordinal & gt; 0
WHERE t.name = 'FactResellerSales'
AND i.type & lt; = 1
AND c.column_id = ic.column_id;
 

D. Hợp nhất hai phân vùng

Ví dụ sau hợp nhất hai phân vùng trên một bảng.

Bảng Khách hàng có định nghĩa sau:

  TẠO BẢNG Khách hàng (
    id INT NOT NULL,
    lastName VARCHAR (20),
    orderCount INT,
    orderDate DATE)
VỚI
    (DISTRIBUTION = HASH (id),
    PHẦN (orderCount RANGE LEFT
    CHO CÁC GIÁ TRỊ (1, 5, 10, 25, 50, 100)));
 

Lệnh sau kết hợp ranh giới phân vùng 10 và 25.

  ALTER TABLE Customer MERGE RANGE (10);
 

DDL mới cho bảng là:

  TẠO BẢNG Khách hàng (
    id INT NOT NULL,
    lastName VARCHAR (20),
    orderCount INT,
    orderDate DATE)
VỚI
    (DISTRIBUTION = HASH (id),
    PHẦN (orderCount RANGE LEFT
    CHO CÁC GIÁ TRỊ (1, 5, 25, 50, 100)));
 

E. Tách phân vùng

Ví dụ sau chia một phân vùng trên bảng.

Bảng Khách hàng có DDL sau:

  DROP TABLE Khách hàng;

TẠO BẢNG Khách hàng (
    id INT NOT NULL,
    lastName VARCHAR (20),
    orderCount INT,
    orderDate DATE)
VỚI
    (DISTRIBUTION = HASH (id),
    PHẦN (orderCount RANGE LEFT
    CHO CÁC GIÁ TRỊ (1, 5, 10, 25, 50, 100)));
 

Lệnh sau tạo một phân vùng mới được giới hạn bởi giá trị 75, trong khoảng từ 50 đến 100.

  ALTER TABLE RANGE SPLIT Khách hàng (75);
 

DDL mới cho bảng là:

  TẠO BẢNG Khách hàng (
   id INT NOT NULL,
   lastName VARCHAR (20),
   orderCount INT,
   orderDate DATE)
   VỚI PHÂN PHỐI = HASH (id),
   PARTITION (số lượng đặt hàng (RANGE LEFT
      CHO CÁC GIÁ TRỊ (1, 5, 10, 25, 50, 75, 100)));
 

F. Sử dụng SWITCH để di chuyển phân vùng sang bảng lịch sử

Ví dụ sau di chuyển dữ liệu trong một phân vùng của bảng Đơn hàng sang một phân vùng trong bảng Danh sách đơn hàng .

Bảng Đơn hàng có DDL sau:

  TẠO BẢNG Đơn đặt hàng (
    id INT,
    thành phố VARCHAR (25),
    lastUpdateDate DATE,
    orderDate DATE)
VỚI
    (DISTRIBUTION = HASH (id),
    PHẦN (orderDate RANGE RIGHT
    CHO CÁC GIÁ TRỊ ('2004-01-01', '2005-01-01', '2006-01-01', '2007-01-01')));
 

Trong ví dụ này, bảng Đơn hàng có các phân vùng sau. Mỗi phân vùng chứa dữ liệu.

Vách ngăn
Có dữ liệu?
Phạm vi ranh giới

1
Đúng
Ngày đặt hàng & lt; '2004-01-01'

2
Đúng
'2004-01-01' & lt; = OrderDate & lt; '2005-01-01'

3
Đúng
'2005-01-01' & lt; = OrderDate & lt; '2006-01-01'

4
Đúng
'2006-01-01' & lt; = OrderDate & lt; '2007-01-01'

5
Đúng
'2007-01-01' & lt; = Ngày đặt hàng

  • Phân vùng 1 (có dữ liệu): Ngày đặt hàng & lt; '2004-01-01'
  • Phân vùng 2 (có dữ liệu): '2004-01-01' & lt; = OrderDate & lt; '2005-01-01'
  • Phân vùng 3 (có dữ liệu): '2005-01-01' & lt; = OrderDate & lt; '2006-01-01'
  • Phân vùng 4 (có dữ liệu): '2006-01-01' & lt; = OrderDate & lt; '2007-01-01'
  • Phân vùng 5 (có dữ liệu): '2007-01-01' & lt; = OrderDate

Bảng Danh sách Đơn hàng có DDL sau, có các cột và tên cột giống hệt như bảng Đơn hàng . Cả hai đều được phân phối băm trên cột id .

  TẠO BẢNG Đơn đặt hàngHistory (
   id INT,
   thành phố VARCHAR (25),
   lastUpdateDate DATE,
   orderDate DATE)
VỚI
    (DISTRIBUTION = HASH (id),
    PHẦN (orderDate RANGE RIGHT
    CHO CÁC GIÁ TRỊ ('2004-01-01')));
 

Mặc dù các cột và tên cột phải giống nhau, nhưng ranh giới phân vùng không cần phải giống nhau. Trong ví dụ này, bảng OrderHistory có hai phân vùng sau và cả hai phân vùng đều trống:

  • Phân vùng 1 (không có dữ liệu): Ngày đặt hàng & lt; '2004-01-01'
  • Phân vùng 2 (trống): '2004-01-01' & lt; = OrderDate

Đối với hai bảng trước, lệnh sau sẽ di chuyển tất cả các hàng với OrderDate & lt; '2004-01-01' từ bảng Đơn hàng đến bảng Danh sách đơn hàng .

  ALTER TABLE Đơn đặt hàng CHUYỂN ĐỔI PHẦN 1 THÀNH PHẦN LỊCH TRÌNH 1;
 

Do đó, phân vùng đầu tiên trong Đơn hàng trống và phân vùng đầu tiên trong Danh sách đơn hàng chứa dữ liệu. Các bảng hiện xuất hiện như sau:

Bảng Đơn hàng

  • Phân vùng 1 (trống): Ngày Đặt hàng & lt; '2004-01-01'
  • Phân vùng 2 (có dữ liệu): '2004-01-01' & lt; = OrderDate & lt; '2005-01-01'
  • Phân vùng 3 (có dữ liệu): '2005-01-01' & lt; = OrderDate & lt; '2006-01-01'
  • Phân vùng 4 (có dữ liệu): '2006-01-01' & lt; = OrderDate & lt; '2007-01-01'
  • Phân vùng 5 (có dữ liệu): '2007-01-01' & lt; = OrderDate

Bảng Danh mục đơn hàng

  • Phân vùng 1 (có dữ liệu): Ngày đặt hàng & lt; '2004-01-01'
  • Phân vùng 2 (trống): '2004-01-01' & lt; = OrderDate

Để dọn dẹp bảng Đơn hàng , bạn có thể xóa phân vùng trống bằng cách hợp nhất phân vùng 1 và 2 như sau:

  ALTER TABLE Đơn đặt hàng MERGE RANGE ('2004-01-01');
 

Sau khi hợp nhất, bảng Đơn hàng có các phân vùng sau:

Bảng Đơn hàng

  • Phân vùng 1 (có dữ liệu): Ngày đặt hàng & lt; '2005-01-01'
  • Phân vùng 2 (có dữ liệu): '2005-01-01' & lt; = OrderDate & lt; '2006-01-01'
  • Phân vùng 3 (có dữ liệu): '2006-01-01' & lt; = OrderDate & lt; '2007-01-01'
  • Phân vùng 4 (có dữ liệu): '2007-01-01' & lt; = OrderDate

Giả sử một năm nữa trôi qua và bạn đã sẵn sàng để lưu trữ năm 2005. Bạn có thể phân bổ phân vùng trống cho năm 2005 trong bảng Danh sách đơn hàng bằng cách chia phân vùng trống như sau:

  ALTER TABLE OrderHistory SPLIT RANGE ('2005-01-01');
 

Sau khi tách, bảng OrderHistory có các phân vùng sau:

Bảng Danh mục đơn hàng

  • Phân vùng 1 (có dữ liệu): Ngày đặt hàng & lt; '2004-01-01'
  • Phân vùng 2 (trống): '2004-01-01' & lt; '2005-01-01'
  • Phân vùng 3 (trống): '2005-01-01' & lt; = OrderDate

Xem thêm

Các bước tiếp theo


Xem thêm những thông tin liên quan đến chủ đề thay đổi cột thả bảng trong máy chủ sql

Create, Alter, Drop default constraint in SQL Server - Part 9

  • Tác giả: IT Port
  • Ngày đăng: 2017-08-10
  • Đánh giá: 4 ⭐ ( 1189 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Subscribe to IT PORT : https://www.youtube.com/c/itport28

    SQL Server Tutorial in Tamil : https://www.youtube.com/playlist?list=PLouAaeZ4xQ64enJDwWVvN3KduuZRlUrb3
    SQL Server Concepts in Tamil : https://www.youtube.com/playlist?list=PLouAaeZ4xQ67kdNIByJKAGBIBhor_h4Hs
    SQL Server Analytic Functions in Tamil : https://www.youtube.com/playlist?list=PLouAaeZ4xQ65XIU5azEUgLVrBKEl-jWMV

    SQL Server Tutorial : https://www.youtube.com/playlist?list=PLouAaeZ4xQ66AYrzPtxt2SeeR4UABcBcO
    SQL Server Concepts : https://www.youtube.com/playlist?list=PLouAaeZ4xQ66zRe8-nDDy-YHY2o0rmbn4
    SQL Server Analytic Functions : https://www.youtube.com/playlist?list=PLouAaeZ4xQ64hTsEdhLsVBquE1vERWngX

    In this video you can learn How to create default constraint,
    How to add default constraint in existing column, How to alter table with new default constraint column and how to drop existing default constraint.

    The DEFAULT constraint provides a default value to a column when the INSERT INTO statement does not provide a specific value

Cách đơn giản để chuyển đổi các cột và hàng trong SQL?

  • Tác giả: qastack.vn
  • Đánh giá: 3 ⭐ ( 1572 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Có một số cách mà bạn có thể chuyển đổi dữ liệu này. Trong bài đăng…

KB3098529-sửa lỗi: khẳng định lỗi khi bạn thay đổi kiểu cột trong SQL Server 2014

  • Tác giả: support.microsoft.com
  • Đánh giá: 5 ⭐ ( 8147 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Khắc phục sự cố xảy ra khi bạn thay đổi kiểu cột trong bảng có chỉ mục liên cụm trong SQL Server 2014.

Cách tạo, kiểm tra và thay đổi cột Identity trên Microsoft SQL Server

  • Tác giả: thuthuat.taimienphi.vn
  • Đánh giá: 3 ⭐ ( 2757 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cach tao kiem tra va thay doi cot Identity tren Microsoft SQL Server, Cách tạo, kiểm tra và thay đổi cột Identity trên Microsoft SQL Server

Cột thay thế trong MySQL

  • Tác giả: vi.softoban.com
  • Đánh giá: 3 ⭐ ( 4037 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong khi quản lý cơ sở dữ liệu, người quản trị cơ sở dữ liệu cần phải thay đổi cấu trúc của bảng để luôn cập nhật. Trong bài viết này, chúng ta sẽ tìm hiểu một số loại tác vụ khác nhau mà chúng ta có thể thực hiện bằng cách sử dụng lệnh ALTER được cung cấp của MySQL.

Cách thêm cột vào bảng MySQL

  • Tác giả: www.greelane.com
  • Đánh giá: 3 ⭐ ( 9555 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cách thêm cột vào MySQL bằng lệnh SQL

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

By ads_php