TẠO BẢNG (Transact-SQL)

Bạn đang xem: tạo bảng dưới dạng máy chủ sql

TẠO BẢNG (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

Tạo một bảng mới trong SQL Server và Azure SQL Database.

Lưu ý

Để biết cú pháp Azure Synapse Analytics, hãy xem TẠO BẢNG (Azure Synapse Analytics) .

Quy ước về cú pháp Transact-SQL

Cú pháp đơn giản

  - Cú pháp TẠO BẢNG đơn giản (phổ biến nếu không sử dụng tùy chọn)
TẠO BẢNG
    {database_name.schema_name.table_name | schema_name.table_name | table_name}
    ({& lt; column_definition & gt;} [, ... n])
[; ]
 

Cú pháp đầy đủ

 - Cú pháp TẠO BẢNG dựa trên đĩa
TẠO BẢNG
    {database_name.schema_name.table_name | schema_name.table_name | table_name}
    [AS FileTable]
    ({& lt; column_definition & gt;
        | & lt; computed_column_definition & gt;
        | & lt; column_set_definition & gt;
        | [& lt; table_constraint & gt; ] [ ,... N ]
        | [& lt; table_index & gt; ]}
          [ ,...N ]
          [PERIOD FOR SYSTEM_TIME (system_start_time_column_name
             , system_end_time_column_name)]
      )
    [BẬT {partition_scheme_name (partition_column_name)
           | nhóm tập tin
           | "mặc định" } ]
    [TEXTIMAGE_ON {nhóm tệp | "mặc định" } ]
    [FILESTREAM_ON {partition_scheme_name
           | nhóm tập tin
           | "mặc định" } ]
    [VỚI (& lt; table_option & gt; [, ... n])]
[; ]
  
& lt; column_definition & gt; :: =
column_name & lt; data_type & gt;
    [ TẬP HỒ SƠ ]
    [COLLATE collation_name]
    [SPARSE]
    [MASKED WITH (FUNCTION = 'mask_ Chức năng')]
    [[CONSTRAINT binding_name] DEFAULT const_expression]
    [IDENTITY [(hạt giống, gia số)]
    [KHÔNG ĐỂ THAY THẾ]
    [ĐƯỢC PHÁT SINH LUÔN LÀ {ROW | TRANSACTION_ID | SEQUENCE_NUMBER} {START | HẾT} [HIDDEN]]
    [NULL | CÓ GIÁ TRỊ ]
    [ROWGUIDCOL]
    [TIẾP CẬN VỚI
        (COLUMN_ENCRYPTION_KEY = key_name,
          ENCRYPTION_TYPE = {DETERMINISTIC | NGẪU NHIÊN } ,
          ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
        )]
    [& lt; column_constraint & gt; [, ...N ] ]
    [& lt; column_index & gt; ]
  
& lt; data_type & gt; :: =
[type_schema_name. ] tên loại
    [(precision [, scale] | max |
        [{NỘI DUNG | DOCUMENT}] xml_schema_collection)]
  
& lt; column_constraint & gt; :: =
[CONSTRAINT binding_name]
{
   {CHÌA KHÓA CHÍNH | ĐỘC NHẤT }
        [ĐÃ ĐIỀU CHỈNH | KHÔNG ĐƯỢC ĐIỀU CHỈNH]
        [
            VỚI FILLFACTOR = fillfactor
          | VỚI (& lt; index_option & gt; [, ... n])
        ]
        [BẬT {partition_scheme_name (partition_column_name)
            | nhóm tập tin | "mặc định" } ]
  
  | [TỪ KHÓA NGOẠI TỆ]
        TÀI LIỆU THAM KHẢO [schema_name. ] reference_table_name [(ref_column)]
        [BẬT XÓA {KHÔNG CÓ HÀNH ĐỘNG | CASCADE | BỘ NULL | ĐẶT ĐỊNH NGHĨA}]
        [TRÊN CẬP NHẬT {KHÔNG CÓ HÀNH ĐỘNG | CASCADE | BỘ NULL | ĐẶT ĐỊNH NGHĨA}]
        [KHÔNG ĐỂ THAY THẾ]
  
  | KIỂM TRA [KHÔNG ĐỂ THAY THẾ] (biểu_thức_ logic)
}
  
& lt; column_index & gt; :: =
 INDEX index_name [CLUSTERED | KHÔNG ĐƯỢC ĐIỀU CHỈNH]
    [VỚI (& lt; index_option & gt; [, ... n])]
    [BẬT {partition_scheme_name (column_name)
         | filegroup_name
         | mặc định
         }
    ]
    [FILESTREAM_ON {filestream_filegroup_name | partition_scheme_name | "VÔ GIÁ TRỊ" } ]
  
& lt; computed_column_definition & gt; :: =
column_name AS computed_column_expression
[ĐÃ ĐƯỢC ĐĂNG KÝ [KHÔNG ĐẦY ĐỦ]]
[
    [CONSTRAINT binding_name]
    {CHÌA KHÓA CHÍNH | ĐỘC NHẤT }
        [ĐÃ ĐIỀU CHỈNH | KHÔNG ĐƯỢC ĐIỀU CHỈNH]
        [
            VỚI FILLFACTOR = fillfactor
          | VỚI (& lt; index_option & gt; [, ... n])
        ]
        [BẬT {partition_scheme_name (partition_column_name)
        | nhóm tập tin | "mặc định" } ]
  
    | [TỪ KHÓA NGOẠI TỆ]
        REFERENCES được tham chiếu_bảng_tên [(ref_column)]
        [BẬT XÓA {KHÔNG CÓ HÀNH ĐỘNG | CASCADE}]
        [BẬT CẬP NHẬT {KHÔNG CÓ HÀNH ĐỘNG}]
        [KHÔNG ĐỂ THAY THẾ]
  
    | KIỂM TRA [KHÔNG ĐỂ THAY THẾ] (biểu_thức_ logic)
]
  
& lt; column_set_definition & gt; :: =
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
  
& lt; table_constraint & gt; :: =
[CONSTRAINT binding_name]
{
    {CHÌA KHÓA CHÍNH | ĐỘC NHẤT }
        [ĐÃ ĐIỀU CHỈNH | KHÔNG ĐƯỢC ĐIỀU CHỈNH]
        (cột [ASC | DESC] [, ... n])
        [
            VỚI FILLFACTOR = fillfactor
           | VỚI (& lt; index_option & gt; [, ... n])
        ]
        [BẬT {partition_scheme_name (partition_column_name)
            | nhóm tập tin | "mặc định" } ]
    | TỪ KHÓA NGOẠI TỆ
        (cột [, ... n])
        REFERENCES tên_tên_bảng_tham chiếu [(ref_column [, ... n])]
        [BẬT XÓA {KHÔNG CÓ HÀNH ĐỘNG | CASCADE | BỘ NULL | ĐẶT ĐỊNH NGHĨA}]
        [TRÊN CẬP NHẬT {KHÔNG CÓ HÀNH ĐỘNG | CASCADE | BỘ NULL | ĐẶT ĐỊNH NGHĨA}]
        [KHÔNG ĐỂ THAY THẾ]
    | KIỂM TRA [KHÔNG ĐỂ THAY THẾ] (biểu_thức_ logic)

& lt; table_index & gt; :: =
{
    {
      INDEX index_name [UNIQUE] [CLUSTERED | KHÔNG ĐƯỢC ĐIỀU CHỈNH]
         (column_name [ASC | DESC] [, ... n])
    | INDEX index_name CLUSTERED COLUMNSTORE
    | INDEX index_name [NONCLUSTERED] COLUMNSTORE (column_name [, ... n])
    }
    [VỚI (& lt; index_option & gt; [, ... n])]
    [BẬT {partition_scheme_name (column_name)
         | filegroup_name
         | mặc định
         }
    ]
    [FILESTREAM_ON {filestream_filegroup_name | partition_scheme_name | "VÔ GIÁ TRỊ" } ]
  
}

& lt; table_option & gt; :: =
{
    [DATA_COMPRESSION = {KHÔNG CÓ | ROW | TRANG }
      [TRÊN CÁC PHẦN ({& lt; partition_number_expression & gt; | & lt; range & gt;}
      [ , ...N ] ) ] ]
    [XML_COMPRESSION = {BẬT | TẮT }
      [TRÊN ĐỐI TÁCIONS ({& lt; partition_number_expression & gt; | & lt; range & gt;}
      [ , ...N ] ) ] ]
    [FILETABLE_DIRECTORY = & lt; tên_thư mục & gt; ]
    [FILETABLE_COLLATE_FILENAME = {& lt; collation_name & gt; | database_default}]
    [FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = & lt; bind_name & gt; ]
    [FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = & lt; bind_name & gt; ]
    [FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = & lt; bind_name & gt; ]
    [SYSTEM_VERSIONING = BẬT
        [(HISTORY_TABLE = schema_name.history_table_name
          [, DATA_CONSISTENCY_CHECK = {BẬT | TẮT } ]
    )]
    ]
    [REMOTE_DATA_ARCHIVE =
      {
        BẬT [(& lt; table_stretch_options & gt; [, ... n])]
        | TẮT (MIGRATION_STATE = PAUSED)
      }
    ]
    [DATA_DELETION = BẬT
          {(
             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}
        )}
    ]
    [LEDGER = ON [(& lt; ledger_option & gt; [, ... n])]
    | TẮT
    ]
}

& lt; ledger_option & gt; :: =
{
    [LEDGER_VIEW = schema_name.ledger_view_name [(& lt; ledger_view_option & gt; [, ... n])]
    [APPEND_ONLY = ON | TẮT ]
}

& lt; ledger_view_option & gt; :: =
{
    [TRANSACTION_ID_COLUMN_NAME = transaction_id_column_name]
    [SEQUENCE_NUMBER_COLUMN_NAME = serial_number_column_name]
    [OPERATION_TYPE_COLUMN_NAME = operation_type_id column_name]
    [OPERATION_TYPE_DESC_COLUMN_NAME = operation_type_desc_column_name]
}
  
& 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; index_option & gt; :: =
{
    PAD_INDEX = {BẬT | TẮT }
  | FILLFACTOR = fillfactor
  | IGNORE_DUP_KEY = {BẬT | TẮT }
  | STATISTICS_NORECOMPUTE = {BẬT | TẮT }
  | STATISTICS_INCREMENTAL = {BẬT | TẮT }
  | ALLOW_ROW_LOCKS = {BẬT | TẮT }
  | ALLOW_PAGE_LOCKS = {BẬT | TẮT }
  | OPTIMIZE_FOR_SEQUENTIAL_KEY = {BẬT | TẮT }
  | COMPRESSION_DELAY = {0 | trì hoãn [Phút]}
  | DATA_COMPRESSION = {KHÔNG CÓ | ROW | TRANG | COLUMNSTORE | COLUMNSTORE_ARCHIVE}
       [TRÊN CÁC PHẦN ({partition_number_expression | & lt; range & gt;}
       [ , ...N ] ) ]
  | XML_COMPRESSION = {BẬT | TẮT }
      [TRÊN CÁC PHẦN ({& lt; partition_number_expression & gt; | & lt; range & gt;}
      [ , ...N ] ) ] ]
}

& lt; phạm vi & gt; :: =
& lt; phân_lục_số_lượng & gt; ĐẾN & lt; phân vùng_số_thể_thể & gt;
 

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

  - Tối ưu hóa bộ nhớ Cú pháp TẠO BẢNG
TẠO BẢNG
    {database_name.schema_name.table_name | schema_name.table_name | table_name}
    ({& lt; column_definition & gt;
    | [& lt; table_constraint & gt; ] [ ,... N ]
    | [& lt; table_index & gt; ]
      [ ,... N ] }
      [PERIOD FOR SYSTEM_TIME (system_start_time_column_name
        , system_end_time_column_name)]
)
    [VỚI (& lt; table_option & gt; [, ... n])]
 [; ]

& lt; column_definition & gt; :: =
column_name & lt; data_type & gt;
    [COLLATE collation_name]
    [ĐƯỢC PHÁT HIỆN LUÔN NHƯ ROW {BẮT ĐẦU | HẾT} [HIDDEN]]
    [NULL | CÓ GIÁ TRỊ ]
[
    [CONSTRAINT binding_name] DEFAULT memory_optimized_constant_expression]
    | [IDENTITY [(1, 1)]
]
    [& lt; column_constraint & gt; ]
    [& lt; column_index & gt; ]
  
& lt; data_type & gt; :: =
 [type_schema_name. ] type_name [(precision [, scale])]

& lt; column_constraint & gt; :: =
 [CONSTRAINT binding_name]
{
  {CHÌA KHÓA CHÍNH | ĐỘC NHẤT }
      {KHÔNG ĐƯỢC ĐIỀU CHỈNH
        | TIỀN KHÔNG ĐƯỢC ĐIỀU CHỈNH VỚI (BUCKET_COUNT = bucket_count)
      }
  | [TỪ KHÓA NGOẠI TỆ]
        TÀI LIỆU THAM KHẢO [schema_name. ] reference_table_name [(ref_column)]
  | KIỂM TRA (biểu_thức lôgic)
}
  
& 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 ]
  
}
  
& lt; table_option & gt; :: =
{
    MEMORY_OPTIMIZED = BẬT
  | DURABILITY = {SCHEMA_ONLY | SCHEMA_AND_DATA}
  | SYSTEM_VERSIONING = ON [(HISTORY_TABLE = schema_name.history_table_name
        [, DATA_CONSISTENCY_CHECK = {BẬT | TẮT } ] ) ]
  
}
 

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
Là tên của cơ sở dữ liệu mà bảng được tạo. database_name phải chỉ định tên của cơ sở dữ liệu hiện có. Nếu không được chỉ định, database_name sẽ mặc định cho cơ sở dữ liệu hiện tại. Thông tin đăng nhập cho kết nối hiện tại phải được liên kết với ID người dùng hiện có trong cơ sở dữ liệu do database_name chỉ định và ID người dùng đó phải có quyền CREATE TABLE.

schema_name
Là tên của lược đồ chứa bảng mới.

table_name
Là tên của bảng mới. Tên bảng phải tuân theo các quy tắc dành cho mã định danh . table_name có thể có tối đa 128 ký tự, ngoại trừ các tên bảng tạm thời cục bộ (tên được bắt đầu bằng một dấu số duy nhất (#)) không được vượt quá 116 ký tự.

AS FileTable
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2012 (11.x)).

Tạo bảng mới dưới dạng FileTable. Bạn không chỉ định cột vì FileTable có một lược đồ cố định. Để biết thêm thông tin, hãy xem FileTables .

column_name
computed_column_expression
Là một biểu thức xác định giá trị của một cột được tính toán. Cột được tính toán là một cột ảo không được lưu trữ vật lý trong bảng, trừ khi cột được đánh dấu là ĐÃ CÓ. Cột được tính từ một biểu thức sử dụng các cột khác trong cùng một bảng. Ví dụ: một cột được tính toán có thể có định nghĩa: chi phí NHƯ giá * qty . Biểu thức có thể là tên cột không tính toán, hằng số, hàm, biến và bất kỳ sự kết hợp nào của những thứ này được kết nối bởi một hoặc nhiều toán tử. Biểu thức không được là một truy vấn con hoặc chứa các kiểu dữ liệu bí danh.

Các cột được tính có thể được sử dụng trong danh sách được chọn, mệnh đề WHERE, mệnh đề ORDER BY hoặc bất kỳ vị trí nào khác mà trong đó biểu thức chính quy có thể được sử dụng, với các ngoại lệ sau:

  • Các cột được tính toán phải được đánh dấu CÓ LỖI để tham gia vào ràng buộc KIỂM TRA hoặc KHÓA NGOẠI LỆ.

  • Một cột được tính toán có thể được sử dụng làm cột khóa trong chỉ mục hoặc là một phần của bất kỳ ràng buộc CHÍNH hoặc DUY NHẤT nào, nếu giá trị cột được tính toán được xác định bởi một biểu thức xác định và kiểu dữ liệu của kết quả được phép trong các cột chỉ mục.

    Ví dụ: nếu bảng có các cột số nguyên a b , cột được tính toán a + b có thể được lập chỉ mục, nhưng cột được tính Không thể lập chỉ mục a + DATEPART (dd, GETDATE ()) vì giá trị có thể thay đổi trong các lần gọi tiếp theo.

  • Một cột được tính toán không thể là mục tiêu của câu lệnh INSERT hoặc UPDATE.

Lưu ý

Mỗi hàng trong bảng có thể có các giá trị khác nhau cho các cột liên quan đến một cột được tính toán; do đó, cột được tính có thể không có cùng giá trị cho mỗi hàng.

Dựa trên các biểu thức được sử dụng, khả năng vô hiệu của các cột được tính toán được xác định tự động bởi Công cụ cơ sở dữ liệu. Kết quả của hầu hết các biểu thức được coi là nullable ngay cả khi chỉ có các cột không thể hiển thị, bởi vì các dòng dưới hoặc tràn có thể tạo ra kết quả NULL. Sử dụng hàm COLUMNPROPERTY với thuộc tính AllowsNull để điều tra khả năng vô hiệu của bất kỳ cột được tính nào trong bảng. Một biểu thức có thể nullable có thể được biến thành một biểu thức không thể giá trị bằng cách chỉ định ISNULL với hằng số check_expression, trong đó hằng số là một giá trị khác rỗng được thay thế cho bất kỳ kết quả NULL nào. Quyền REFERENCES đối với kiểu là bắt buộc đối với các cột được tính toán dựa trên các biểu thức kiểu do người dùng xác định trong thời gian chạy ngôn ngữ chung (CLR).

ĐÃ ĐƯỢC ĐĂNG KÝ
Chỉ định rằng Công cụ cơ sở dữ liệu SQL Server sẽ lưu trữ vật lý các giá trị được tính toán 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. Đánh dấu cột được tính là PERSISTED cho phép bạn tạo chỉ mục trên cột được tính là 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 đượ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 phải được đánh dấu rõ ràng PERSISTED . computed_column_expression phải mang tính xác định khi PERSISTED được chỉ định.

BẬT {partition_scheme | nhóm tập tin | “mặc định” }
Chỉ định lược đồ phân vùng hoặc nhóm tệp mà bảng được lưu trữ trên đó. Nếu partition_scheme được chỉ định, bảng sẽ là một bảng được phân vùng có các phân vùng được lưu trữ trên một tập hợp một hoặc nhiều nhóm tệp được chỉ định trong partition_scheme. Nếu nhóm tệp được chỉ định, bảng được lưu trữ trong nhóm tệp được đặt tên. Nhóm tệp phải tồn tại trong cơ sở dữ liệu. Nếu “mặc định” được chỉ định hoặc nếu BẬT hoàn toàn không được chỉ định, bảng được lưu trữ trên nhóm tệp mặc định. Sau đó không thể thay đổi cơ chế lưu trữ của bảng như đã chỉ định trong TẠO BẢNG.

BẬT {partition_scheme | nhóm tập tin | “default” } cũng có thể được chỉ định trong khóa CHÍNH hoặc ràng buộc DUY NHẤT. Những ràng buộc này tạo ra các chỉ mục. Nếu nhóm tệp được chỉ định, chỉ mục được lưu trữ trong nhóm tệp được đặt tên. Nếu “mặc định” được chỉ định hoặc nếu BẬT hoàn toàn không được chỉ định, chỉ mục được lưu trữ trong cùng nhóm tệp với bảng. Nếu ràng buộc PRIMARY KEY hoặc UNIQUE tạo chỉ mục theo nhóm, các trang dữ liệu cho bảng được lưu trữ trong cùng nhóm tệp với chỉ mục. Nếu CLUSTERED được chỉ định hoặc theo cách khác, ràng buộc sẽ tạo ra một chỉ mục được phân nhóm và phân vùng_scheme được chỉ định khác với phân vùng_scheme hoặc nhóm tệp của định nghĩa bảng hoặc ngược lại, chỉ định nghĩa ràng buộc sẽ được áp dụng, và phần còn lại sẽ bị bỏ qua.

Lưu ý

Trong ngữ cảnh này, mặc định không phải là một từ khóa. Đây là số nhận dạng cho nhóm tệp mặc định và phải được phân tách, như trong BẬT “mặc định” hoặc BẬT [ mặc định ] . Nếu “default” được chỉ định, tùy chọn QUOTED_IDENTIFIER phải 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 .

Sau khi bạn tạo bảng được phân vùng, hãy cân nhắc đặt tùy chọn LOCK_ESCALATION cho bảng thành AUTO . Điều này có thể cải thiện tính đồng thời bằng cách cho phép các khóa chuyển sang mức phân vùng (HoBT) thay vì bảng. Để biết thêm thông tin, hãy xem BẢNG THAY THẾ .

TEXTIMAGE_ON {nhóm tệp | “mặc định” }
Cho biết rằng văn bản , ntext , hình ảnh , xml , varchar (max) , nvarchar (max) , varbinary (max) và các cột kiểu CLR do người dùng xác định (bao gồm cả hình học và địa lý) được lưu trữ trên nhóm tệp được chỉ định.

TEXTIMAGE_ON không được phép nếu không có cột giá trị lớn nào trong bảng. Không thể chỉ định TEXTIMAGE_ON nếu partition_scheme được chỉ định. Nếu “default” được chỉ định hoặc nếu TEXTIMAGE_ON hoàn toàn không được chỉ định, các cột giá trị lớn được lưu trữ trong nhóm tệp mặc định. Sau đó, không thể thay đổi việc lưu trữ bất kỳ dữ liệu cột có giá trị lớn nào được chỉ định trong CREATE TABLE .

Lưu ý

Các giá trị Varchar (max), nvarchar (max), varbinary (max), xml và lớn UDT được lưu trữ trực tiếp trong hàng dữ liệu, lên đến giới hạn 8.000 byte và miễn là giá trị có thể vừa với bản ghi. Nếu giá trị không phù hợp với bản ghi, một con trỏ được lưu trữ trong hàng và phần còn lại được lưu trữ ngoài hàng trong không gian lưu trữ LOB. 0 là giá trị mặc định, cho biết rằng tất cả các giá trị được lưu trữ trực tiếp trong hàng dữ liệu.

TEXTIMAGE_ON chỉ thay đổi vị trí của “không gian lưu trữ LOB”, không ảnh hưởng khi dữ liệu được lưu trữ trong hàng. Sử dụng tùy chọn loại giá trị lớn ngoài hàng của sp_tableoption để lưu trữ toàn bộ giá trị LOB ngoài hàng.

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 TEXTIMAGE_ON "default" hoặc TEXTIMAGE_ON [default] . Nếu “default” được chỉ định, tùy chọn QUOTED_IDENTIFIER phải 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 .

FILESTREAM_ON {partition_scheme_name | nhóm tập tin | mặc định }
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2008 R2). Cơ sở dữ liệu Azure SQL và Phiên bản được quản lý SQL Azure không hỗ trợ FILESTREAM .

Chỉ định nhóm tệp cho dữ liệu FILESTREAM.

Nếu bảng chứa dữ liệu FILESTREAM và bảng được phân vùng, mệnh đề FILESTREAM_ON phải được bao gồm và phải chỉ định sơ đồ phân vùng của nhóm tệp FILESTREAM. Lược đồ phân vùng này phải sử dụng chức năng phân vùng và các cột phân vùng giống như lược đồ phân vùng cho bảng; nếu không, một lỗi sẽ xuất hiện.

Nếu bảng không được phân vùng, thì cột FILESTREAM không thể được phân vùng. Dữ liệu FILESTREAM cho bảng phải được lưu trữ trong một nhóm tệp duy nhất. Nhóm tệp này được chỉ định trong mệnh đề FILESTREAM_ON.

Nếu bảng không được phân vùng và mệnh đề FILESTREAM_ON không được chỉ định, nhóm tệp FILESTREAM có bộ thuộc tính DEFAULT sẽ được sử dụng. Nếu không có nhóm tệp FILESTREAM, lỗi sẽ xảy ra.

Giống như ON và TEXTIMAGE_ON , không thể thay đổi giá trị được đặt bằng cách sử dụng CREATE TABLE cho FILESTREAM_ON , ngoại trừ các trường hợp sau: < / p>

  • CREATE INDEXcâu lệnh chuyển đổi một đống thành một chỉ mục được nhóm. Trong trường hợp này, có thể chỉ định nhóm tệp FILESTREAM, lược đồ phân vùng hoặc NULL khác.
  • Câu lệnh DROP INDEX chuyển đổi chỉ mục được nhóm thành một đống. Trong trường hợp này, có thể chỉ định nhóm tệp FILESTREAM, lược đồ phân vùng hoặc “mặc định” khác.

Nhóm tệp trong mệnh đề FILESTREAM_ON & lt; filegroup & gt; hoặc mỗi nhóm tệp FILESTREAM được đặt tên trong lược đồ phân vùng, phải có một tệp được xác định cho nhóm tệp. Tệp này phải được xác định bằng cách sử dụng câu lệnh CREATE DATABASE hoặc ALTER DATABASE ; nếu không, một lỗi sẽ xuất hiện.

Để biết các chủ đề FILESTREAM có liên quan, hãy xem Vật thể lớn nhị phân – Dữ liệu khối .

[type_schema_name . ] type_name
Chỉ định kiểu dữ liệu của cột và lược đồ chứa nó. Đối với các bảng dựa trên đĩa, kiểu dữ liệu có thể là một trong những loại sau:

  • Một kiểu dữ liệu hệ thống
  • Một kiểu bí danh dựa trên kiểu dữ liệu hệ thống SQL Server. Các kiểu dữ liệu bí danh được tạo 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. Việc gán NULL hoặc NOT NULL cho kiểu dữ liệu bí danh có thể được ghi đè trong câu lệnh CREATE TABLE . Tuy nhiên, thông số độ dài không thể thay đổi; độ dài cho kiểu dữ liệu bí danh không thể được chỉ định trong câu lệnh CREATE TABLE .
  • Loại CLR do người dùng xác định. Các kiểu CLR do người dùng xác định được tạo 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. Để tạo một cột trên loại CLR do người dùng xác định, cần có quyền THAM KHẢO trên loại.

Nếu type_schema_name không được chỉ định, Công cụ cơ sở dữ liệu SQL Server tham chiếu type_name theo thứ tự sau:

  • Kiểu dữ liệu hệ thống SQL Server.
  • Lược đồ mặc định của người dùng hiện tại trong cơ sở dữ liệu hiện tại.
  • Lược đồ dbo trong cơ sở dữ liệu hiện tại.

Để biết các bảng được tối ưu hóa bộ nhớ, hãy xem Các loại dữ liệu được hỗ trợ cho OLTP trong bộ nhớ để biết danh sách các loại hệ thống được hỗ trợ.

độ chính xác
Là độ 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 .

quy mô
Là thang đo 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 .

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

NỘI DUNG
Chỉ định rằng mỗi phiên bản của kiểu dữ liệu xml trong column_name có thể chứa nhiều phần tử cấp cao nhất. CONTENT chỉ áp dụng cho kiểu dữ liệu xml và chỉ có thể được chỉ định nếu xml_schema_collection cũng được chỉ định. Nếu không được chỉ định, CONTENT là hành vi mặc định.

TÀI LIỆU
Chỉ định rằng mỗi phiên bản của kiểu dữ liệu xml trong column_name chỉ có thể chứa một phần tử cấp cao nhất. DOCUMENT chỉ áp dụng cho kiểu dữ liệu xml và chỉ có thể được chỉ định nếu xml_schema_collection cũng được chỉ định.

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

DEFAULT
Chỉ định giá trị được cung cấp cho cột khi giá trị không được cung cấp rõ ràng trong quá trình chèn. Định nghĩa DEFAULT có thể được áp dụng cho bất kỳ cột nào ngoại trừ những cột được xác định là dấu thời gian hoặc những cột có thuộc tính IDENTITY . Nếu một giá trị mặc định được chỉ định cho cột kiểu do người dùng xác định, thì kiểu đó sẽ hỗ trợ chuyển đổi ngầm định từ hằng_thức sang kiểu do người dùng xác định. Định nghĩa DEFAULT bị loại bỏ khi bảng bị loại bỏ. Chỉ một giá trị không đổi, chẳng hạn như một chuỗi ký tự; một hàm vô hướng (có thể là hệ thống, do người dùng xác định hoặc hàm CLR); hoặc NULL có thể được sử dụng làm mặc định. Để duy trì khả năng tương thích với các phiên bản SQL Server trước đó, một tên ràng buộc có thể được gán cho một DEFAULT.

const_expression
Là một hằng số, NULL hoặc một hàm hệ thống được sử dụng làm giá trị mặc định cho cột.

memory_optimized_constant_expression
Là một hằng số, NULL hoặc một hàm hệ thống được hỗ trợ sử dụng làm giá trị mặc định cho cột. Phải được hỗ trợ trong các thủ tục được lưu trữ được biên dịch nguyên bản. Để biết thêm thông tin về các hàm tích hợp trong các thủ tục được lưu trữ được biên dịch nguyên bản, hãy xem Các tính năng được hỗ trợ cho mô-đun T-SQL được biên dịch tự nhiên .

NHẬN dạng
Cho biết cột mới là cột nhận dạng. Khi một hàng mới được thêm vào bảng, Công cụ Cơ sở dữ liệu cung cấp một giá trị gia tăng, duy nhất cho cột. Các cột nhận dạng thường được sử dụng với các ràng buộc CHÍNH CHÍNH để dùng làm mã định danh hàng duy nhất cho bảng. Thuộc tính IDENTITY có thể được chỉ định cho tinyint , smallint , int , bigint , cột thập phân (p, 0) hoặc số (p, 0) . Mỗi bảng chỉ có thể tạo một cột nhận dạng. Không thể sử dụng mặc định ràng buộc và ràng buộc DEFAULT với cột nhận dạng. Cả hạt giống và mẫu tăng thêm hoặc không phải được chỉ định. Nếu cả hai đều không được chỉ định, giá trị mặc định là (1,1).

hạt giống
Giá trị được sử dụng cho hàng đầu tiên được tải vào bảng.

gia số
Giá trị gia tăng có được thêm vào giá trị nhận dạng của hàng trước đó được tải không.

KHÔNG ĐỂ THAY THẾ
Trong câu lệnh CREATE TABLE , mệnh đề NOT FOR REPLICATION có thể được chỉ định cho thuộc tính IDENTITY, các ràng buộc FOREIGN KEY và CHECK. Nếu mệnh đề này được chỉ định cho thuộc tính IDENTITY , các giá trị không được tăng lên trong các cột nhận dạng khi các tác nhân sao chép thực hiện chèn. Nếu điều khoản này được chỉ định cho một ràng buộc, thì ràng buộc đó sẽ không được thực thi khi tác nhân nhân bản thực hiện các thao tác chèn, cập nhật hoặc xóa.

ĐƯỢC PHÁT SINH LUÔN LÀ {ROW | TRANSACTION_ID | SEQUENCE_NUMBER} {START | HẾT} [HIDDEN] [NOT NULL]
Á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 cột được hệ thống sử dụng để tự động ghi lại thông tin về các phiên bản hàng trong bảng và bảng lịch sử của nó (nếu bảng được tạo phiên bản hệ thống và có bảng lịch sử). Sử dụng đối số này với tham số WITH SYSTEM_VERSIONING = ON để tạo các bảng có phiên bản hệ thống: bảng tạm thời hoặc bảng sổ cái. Để biết thêm thông tin, hãy xem bảng sổ cái có thể cập nhật bảng tạm thời .

Tham số
Kiểu dữ liệu bắt buộc
Khả năng vô hiệu bắt buộc
Sự mô tả

HÀNG NGANG
datetime2
BẮT ĐẦU: NOT NULL
END: NOT NULL
Thời gian bắt đầu mà phiên bản hàng hợp lệ (START) hoặc thời gian kết thúc mà phiên bản hàng hợp lệ (END). Sử dụng đối số này với đối số PERIOD FOR SYSTEM_TIME để tạo bảng tạm thời.

ID GIAO DỊCH
bigint
BẮT ĐẦU: NOT NULL
END: NULL
ID của giao dịch tạo (START) hoặc làm mất hiệu lực (END) một phiên bản hàng. Nếu bảng là một bảng sổ cái, thì ID sẽ tham chiếu đến một hàng trong chế độ xem sys.database_ledger_transactions .
Áp dụng cho: SQL Server 2022, Cơ sở dữ liệu Azure SQL.

SEQUENCE_NUMBER
bigint
BẮT ĐẦU: NOT NULL
END: NULL
Số thứ tự của một thao tác tạo (START) hoặc xóa (END) một phiên bản hàng. Giá trị này là duy nhất trong giao dịch.
Áp dụng cho: SQL Server 2022, Cơ sở dữ liệu Azure SQL.

Nếu bạn cố gắng chỉ định một cột không đáp ứng các yêu cầu về kiểu dữ liệu hoặc tính vô hiệu ở trên, hệ thống sẽ báo lỗi. Nếu bạn không chỉ định rõ ràng khả năng vô hiệu, hệ thống sẽ xác định cột là NULL hoặc NOT NULL theo các yêu cầu trên.

Bạn 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 & gt; không 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 tạm thời một cách rõ ràng. Để thay đổi thuộc tính HIDDEN cho cột khoảng thời gian hiện tại, PERIOD phải được loại bỏ và tạo lại bằng một cờ ẩn khác.

INDEX index_name [CLUSTERED | KHÔNG CHỈNH SỬA] (column_name [ASC | DESC] [, … n])
Áp dụng cho : SQL Server (SQL Server 2014 (12.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định tạo chỉ mục trên bảng. Đây có thể là một chỉ mục theo nhóm hoặc một chỉ mục không hợp nhất. Chỉ mục sẽ chứa các cột được liệt kê và sẽ sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần.

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

Chỉ định lưu trữ toàn bộ bảng ở định dạng cột với một chỉ mục lưu trữ cột theo nhóm. Điều này luôn bao gồm tất cả các cột trong bảng. Dữ liệu không được sắp xếp theo thứ tự chữ cái hoặc số vì các hàng được sắp xếp để đạt được lợi ích nén cột.

INDEX index_name [NONCLUSTERED] COLUMNSTORE (column_name [, … n])
Áp dụng cho : SQL Server (SQL Server 2014 (12.x) trở lên) và Cơ sở dữ liệu Azure SQL.

Chỉ định tạo chỉ mục cột lưu trữ không phân biệt trên bảng. Bảng bên dưới có thể là một đống lưu trữ hàng hoặc chỉ mục nhóm hoặc nó có thể là một chỉ mục lưu trữ cột được phân cụm. Trong mọi trường hợp, việc tạo chỉ mục cột lưu trữ không phân biệt trên bảng sẽ lưu trữ bản sao thứ hai của dữ liệu cho các cột trong chỉ mục.

Chỉ mục kho lưu trữ cột không hợp nhất được lưu trữ và quản lý dưới dạng chỉ mục cửa hàng lưu trữ cột theo nhóm. Nó được gọi là chỉ mục lưu trữ cột không phân bổ vì các cột có thể bị giới hạn và nó tồn tại dưới dạng chỉ mục phụ trên bảng.

BẬT partition_scheme_name ( column_name )
Chỉ định lược đồ phân vùng xác định nhóm tệp mà các phân vùng của chỉ mục được phân vùng sẽ được ánh xạ. Lược đồ phân vùng phải tồn tại trong cơ sở dữ liệu bằng cách thực thi TẠO LẬP KẾ HOẠCH ĐỐI TÁC hoặc TẠO BIỂU ĐỒ ĐỐI TÁC . column_name chỉ định cột mà chỉ mục được phân vùng sẽ được phân vùng. Cột này phải khớp với kiểu dữ liệu, độ dài và độ chính xác của đối số của hàm phân vùng mà partition_scheme_name đang sử dụng. column_name không bị giới hạn đối với các cột trong định nghĩa chỉ mục. Bất kỳ cột nào trong bảng cơ sở đều có thể được chỉ định, ngoại trừ khi phân vùng một chỉ mục DUY NHẤT, thì column_name phải được chọn trong số các cột được sử dụng làm khóa duy nhất. Hạn chế này cho phép Công cụ cơ sở dữ liệu xác minh tính duy nhất của các giá trị khóa chỉ trong một phân vùng duy nhất.

Lưu ý

Khi bạn phân vùng một chỉ mục nhóm, không phải duy nhất, theo mặc định, Công cụ Cơ sở dữ liệu sẽ thêm cột phân vùng vào danh sách các khoá chỉ mục được nhóm, nếu nó chưa được chỉ định. Khi phân vùng một chỉ mục không phải là duy nhất, không phân biệt, Công cụ cơ sở dữ liệu sẽ thêm cột phân vùng làm cột không phải khóa (được bao gồm) của chỉ mục, nếu nó chưa được chỉ định.

Nếu partition_scheme_name hoặc filegroup không được chỉ định và bảng được phân vùng, chỉ mục sẽ được đặt trong cùng một lược đồ phân vùng, sử dụng cùng một cột phân vùng, như bảng bên dưới.

Lưu ý

Bạn không thể chỉ định một lược đồ phân vùng trên một chỉ mục XML. Nếu bảng cơ sở được phân vùng, chỉ mục XML sử dụng lược đồ phân vùng giống như bảng.

Để biết thêm thông tin về chỉ mục phân vùng, Bảng và chỉ mục được phân vùng .

BẬT tên tệp
Tạo chỉ mục được chỉ định trên nhóm tệp được chỉ định. Nếu không có vị trí nào được chỉ định và bảng hoặc dạng xem không được phân vùng, thì chỉ mục sử dụng cùng một nhóm tệp với bảng hoặc dạng xem bên dưới. Nhóm tệp phải đã tồn tại.

Xem Thêm  Thanh di chuột chú giải công cụ HTML: Hướng dẫn tạo thông tin bổ sung - Chú giải công cụ html5 khi di chuột

BẬT “mặc định”
Tạo chỉ mục được chỉ định trên nhóm tệp mặc định.

Thuật ngữ mặc định, trong ngữ cảnh này, không phải là một từ khóa. Đây là số nhận dạng cho nhóm tệp mặc định và phải được phân tách, như trong BẬT “mặc định” hoặc BẬT [mặc định] . Nếu “mặc định” được chỉ định, tùy chọn QUOTED_IDENTIFIER phải 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 .

[FILESTREAM_ON {filestream_filegroup_name | partition_scheme_name | “KHÔNG”}]
Áp dụng cho : SQL Server (SQL Server 2008 R2 trở lên).

Chỉ định vị trí của dữ liệu FILESTREAM cho bảng khi chỉ mục nhóm được tạo. Mệnh đề FILESTREAM_ON cho phép chuyển dữ liệu FILESTREAM sang một nhóm tệp hoặc lược đồ phân vùng FILESTREAM khác.

filestream_filegroup_name là 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, một lỗi sẽ xuất hiện.

Nếu bảng được phân vùng, mệnh đề FILESTREAM_ON phải được bao gồm và phải chỉ định lược đồ phân vùng của nhóm tệp FILESTREAM sử dụng cùng một chức năng phân vùng và các cột phân vùng như lược đồ phân vùng cho bảng. Nếu không, sẽ xảy ra lỗi.

Nếu bảng không được phân vùng, thì cột FILESTREAM không thể được phân vùng. Dữ liệu FILESTREAM cho bảng phải được lưu trữ trong một nhóm tệp duy nhất được chỉ định trong mệnh đề FILESTREAM_ON .

FILESTREAM_ON NULL có thể được chỉ định trong câu lệnh CREATE INDEX nếu một chỉ mục nhóm đang được tạo và bảng không chứa cột FILESTREAM.

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

ROWGUIDCOL
Cho biết cột mới là cột GUID hàng. Chỉ có thể chỉ định một cột uniqueidentifier trên mỗi bảng làm cột ROWGUIDCOL. Việc áp dụng thuộc tính ROWGUIDCOL sẽ cho phép tham chiếu cột bằng cách sử dụng $ ROWGUID . Thuộc tính ROWGUIDCOL chỉ có thể được chỉ định cho cột mã định danh duy nhất . Không thể chỉ định các cột kiểu dữ liệu do người dùng xác định bằng ROWGUIDCOL.

Thuộc tí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. ROWGUIDCOL cũng 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 sử dụng các hàm này làm mặc định cho cột.

ĐƯỢC THAM GIA VỚI
Chỉ định các cột mã hóa bằng cách sử dụng tính năng Luôn được mã hóa .

COLUMN_ENCRYPTION_KEY = key_name
Chỉ định khóa mã hóa cột. Để biết thêm thông tin, hãy xem TẠO TỪ KHÓA KÍCH THƯỚC CỘT .

ENCRYPTION_TYPE = {DETERMINISTIC | NGẪU NHIÊN}
Mã hóa xác định sử dụng một phương pháp luôn tạo ra cùng một giá trị được mã hóa cho bất kỳ giá trị văn bản thuần túy nào. Sử dụng mã hóa xác định cho phép tìm kiếm bằng cách sử dụng bảng so sánh bình đẳng, nhóm và nối bằng cách sử dụng các phép nối bình đẳng dựa trên các giá trị được mã hóa, nhưng cũng có thể cho phép người dùng trái phép đoán thông tin về các giá trị được mã hóa bằng cách kiểm tra các mẫu trong cột được mã hóa. Việc nối hai bảng trên các cột được mã hóa một cách xác định chỉ có thể thực hiện được nếu cả hai cột đều được mã hóa bằng cùng một khóa mã hóa cột. Mã hóa xác định phải sử dụng đối chiếu cột với thứ tự sắp xếp binary2 cho các cột ký tự.

Mã hóa ngẫu nhiên sử dụng phương pháp mã hóa dữ liệu theo cách ít dễ đoán hơn. Mã hóa ngẫu nhiên an toàn hơn, nhưng nó ngăn chặn bất kỳ tính toán và lập chỉ mục nào trên các cột được mã hóa, trừ khi phiên bản SQL Server của bạn hỗ trợ Luôn được Mã hóa bằng các mã bảo mật. Vui lòng xem Luôn được mã hóa bằng các vùng bảo mật để biết chi tiết.

Nếu bạn đang sử dụng Luôn được mã hóa (không có mã hóa an toàn), hãy sử dụng mã hóa xác định cho các cột sẽ được tìm kiếm với các tham số hoặc tham số nhóm, ví dụ: số ID của chính phủ. Sử dụng mã hóa ngẫu nhiên, cho dữ liệu chẳng hạn như số thẻ tín dụng, không được nhóm với các bản ghi khác hoặc được sử dụng để nối các bảng và không được tìm kiếm vì bạn sử dụng các cột khác (chẳng hạn như số giao dịch) để tìm hàng chứa cột quan tâm được mã hóa.

Nếu bạn đang sử dụng Luôn được mã hóa bằng các mã bảo mật, thì mã hóa ngẫu nhiên là loại mã hóa được khuyến nghị.

Các cột phải thuộc loại dữ liệu đủ điều kiện.

THUẬT TOÁN
Áp dụng cho : SQL Server (SQL Server 2016 (13.x) trở lên).

Phải là ‘AEAD_AES_256_CBC_HMAC_SHA_256’ .

Để biết thêm thông tin, bao gồm cả các ràng buộc về tính năng, hãy xem Luôn được mã hóa .

SPARSE
Cho biết rằng cột 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. Các cột thưa thớt không thể được chỉ định là KHÔNG ĐẦY ĐỦ. Để 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 .

MASKED WITH (FUNCTION = ‘mask_ Chức năng’)
Áp dụng cho : SQL Server
(SQL Server 2016 (13.x) trở lên).

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. Bốn chức năng có sẵn:

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

Yêu cầu quyền ALTER ANY MASK .

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

FILESTREAM
Áp dụng cho : SQL Server (SQL Server 2008 R2 trở lên)

Chỉ hợp lệ cho các cột varbinary (max) . Chỉ định bộ nhớ FILESTREAM cho dữ liệu BLOB varbinary (max) .

Bảng cũng phải có một cột của loại dữ liệu uniqueidentifier có thuộc tính ROWGUIDCOL. Cột này không được cho phép giá trị rỗng và phải có ràng buộc cột đơn UNIQUE hoặc PRIMARY KEY. Giá trị GUID cho cột phải được cung cấp bởi ứng dụng khi chèn dữ liệu hoặc bởi ràng buộc DEFAULT sử dụng hàm NEWID ().

Không thể bỏ cột ROWGUIDCOL và không thể thay đổi các ràng buộc liên quan trong khi có cột FILESTREAM được xác định cho bảng. Chỉ có thể bỏ cột ROWGUIDCOL sau khi cột FILESTREAM cuối cùng bị bỏ.

Khi thuộc tính lưu trữ FILESTREAM được chỉ định cho một cột, tất cả các giá trị cho cột đó được lưu trữ trong vùng chứa dữ liệu FILESTREAM trên hệ thống tệp.

COLLATE collation_name
Chỉ định đối chiếu cho cột. Tên đối chiếu có thể là tên đối chiếu Windows hoặc tên đối chiếu SQL. collation_name chỉ áp dụng cho các cột char , varchar , text , nchar , nvarchar ntext kiểu dữ liệu. Nếu không được chỉ định, cột sẽ được chỉ định đối chiếu của kiểu dữ liệu do người dùng xác định, nếu cột thuộc loại dữ liệu do người dùng xác định hoặc đối chiếu mặc định của cơ sở dữ liệu.

Để biết thêm thông tin về tên đối chiếu Windows và SQL, hãy xem Tên đối chiếu Windows Tên đối chiếu SQL .

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

CONSTRAINT
Là một từ khóa tùy chọn cho biết sự bắt đầu của định nghĩa về một KHÓA CHÍNH, KHÔNG ĐẦY ĐỦ, DUY NHẤT, NGOẠI HỐI hoặc ràng buộc KIỂM TRA.

tên_là_lệnh
Là tên của một ràng buộc. Tên giới hạn phải là duy nhất trong lược đồ chứa bảng.

NULL | KHÔNG ĐẦY ĐỦ
Xác định xem giá trị null có được phép trong cột hay không. NULL không hoàn toàn là một ràng buộc nhưng có thể được chỉ định giống như NOT NULL. Chỉ có thể chỉ định NOT NULL cho các cột được tính nếu PERSISTED cũng được chỉ định.

KHÓA CHÍNH
Là một ràng buộc thực thi tính toàn vẹn của thực thể đối với một hoặc các cột được chỉ định thông qua một chỉ mục duy nhất. Chỉ có thể tạo một ràng buộc CHÍNH CHÍNH cho mỗi bảng.

DUY NHẤT
Là một ràng buộc cung cấp tính toàn vẹn của thực thể cho một cột hoặc các cột được chỉ định thông qua một chỉ mục duy nhất. Một bảng có thể có nhiều ràng buộc DUY NHẤT.

ĐÃ ĐIỀU CHỈNH | KHÔNG ĐƯỢC ĐIỀU CHỈNH
Cho biết rằng chỉ mục được phân nhóm hoặc không phân nhóm được tạo cho ràng buộc CHÍNH hoặc DUY NHẤT. Các ràng buộc CHÍNH CHÍNH mặc định thành ĐÃ ĐIỀU CHỈNH và các ràng buộc DUY NHẤT mặc định thành KHÔNG CHỈNH SỬA.

Trong câu lệnh CREATE TABLE , CLUSTERED chỉ có thể được chỉ định cho một ràng buộc. Nếu CLUSTERED được chỉ định cho một ràng buộc UNIQUE và một ràng buộc PRIMARY KEY cũng được chỉ định, PRIMARY KEY sẽ mặc định là NONCLUSTERED.

TÀI LIỆU THAM KHẢO NƯỚC NGOÀI
Là một ràng buộc cung cấp tính toàn vẹn tham chiếu cho dữ liệu trong cột hoặc các cột. Ràng buộc NGOẠI KHÓA yêu cầu mỗi giá trị trong cột tồn tại trong cột được tham chiếu tương ứng hoặc các cột trong bảng được tham chiếu. Các ràng buộc NGOẠI KHÓA chỉ có thể tham chiếu các cột là KHÓA CHÍNH hoặc các ràng buộc DUY NHẤT trong bảng được tham chiếu hoặc các cột được tham chiếu trong CHỈ SỐ DUY NHẤT trên bảng được tham chiếu. Các khóa ngoại trên các cột được tính cũng phải được đánh dấu ĐÃ ĐƯỢC ĐĂNG KÝ.

[_schema_name **. **] reference_table_name]
Là tên của bảng được tham chiếu bởi ràng buộc NGOẠI KHÓA và lược đồ chứa nó.

( ref_column [, … n] )
Là một cột, hoặc danh sách các cột, từ bảng được tham chiếu bởi ràng buộc NGOẠI KHÓA.

BẬT XÓA { KHÔNG CÓ HÀNH ĐỘNG | CASCADE | BỘ NULL | ĐẶT ĐỊNH NGHĨA}
Chỉ định hành động nào xảy ra với các hàng trong bảng được tạo, nếu các hàng đó có mối quan hệ tham chiếu và hàng được tham chiếu bị xóa khỏi bảng mẹ. Mặc định là KHÔNG CÓ HÀNH ĐỘNG.

KHÔNG CÓ HÀNH ĐỘNG
Công cụ Cơ sở dữ liệu phát sinh lỗi và hành động xóa trên hàng trong bảng mẹ được khôi phục lại.

CASCADE
Các hàng tương ứng sẽ bị xóa khỏi bảng tham chiếu nếu hàng đó bị xóa khỏi bảng mẹ.

ĐẶT ĐẦY ĐỦ
Tất cả các giá trị tạo nên khóa ngoại được đặt thành NULL nếu hàng tương ứng trong bảng mẹ bị xóa. Để ràng buộc này thực thi, các cột khóa ngoại phải không có giá trị.

ĐẶT ĐỊNH NGHĨA
Tất cả các giá trị tạo nên khóa ngoại được đặt thành giá trị mặc định của chúng nếu hàng tương ứng trong bảng mẹ bị xóa. Để ràng buộc này thực thi, tất cả các cột khóa ngoại phải có định nghĩa mặc định. Nếu một cột là giá trị rỗng và không có bộ giá trị mặc định rõ ràng, NULL sẽ trở thành giá trị mặc định ngầm định của cột.

Không chỉ định CASCADE nếu bảng sẽ được đưa vào một ấn phẩm hợp nhất sử dụng các bản ghi lôgic. Để biết thêm thông tin về bản ghi lôgic, hãy xem Thay đổi của Nhóm đối với các Hàng liên quan có Bản ghi lôgic .

ON DELETE CASCADE không thể được xác định nếu trình kích hoạt INSTEAD OF ON DELETE đã tồn tại trên bảng.

Ví dụ: trong cơ sở dữ liệu AdventureWorks2012 , bảng ProductVendor có mối quan hệ tham chiếu với bảng Nhà cung cấp . Khóa ngoại ProductVendor.BusinessEntityID tham chiếu đến khóa chính Vendor.BusinessEntityID .

Nếu câu lệnh DELETE được thực thi trên một hàng trong bảng Nhà cung cấp và hành động ON DELETE CASCADE được chỉ định cho ProductVendor.BusinessEntityID , Công cụ cơ sở dữ liệu kiểm tra một hoặc nhiều hàng phụ thuộc trong bảng ProductVendor . Nếu có bất kỳ hàng nào tồn tại, các hàng phụ thuộc trong bảng ProductVendor sẽ bị xóa và cả hàng được tham chiếu trong bảng Nhà cung cấp .

Ngược lại, nếu KHÔNG CÓ HÀNH ĐỘNG được chỉ định, Công cụ cơ sở dữ liệu phát sinh lỗi và quay lại hành động xóa trên hàng Nhà cung cấp nếu có ít nhất một hàng trong bảng ProductVendor tham chiếu nó.

BẬT CẬP NHẬT { KHÔNG CÓ HÀNH ĐỘNG | CASCADE \ SET NULL | ĐẶT ĐỊNH NGHĨA}
Chỉ định hành động nào xảy ra với các hàng trong bảng được thay đổi khi các hàng đó có mối quan hệ tham chiếu và hàng được tham chiếu được cập nhật trong bảng mẹ. Mặc định là KHÔNG CÓ HÀNH ĐỘNG.

KHÔNG CÓ HÀNH ĐỘNG
Công cụ cơ sở dữ liệu phát sinh lỗi và hành động cập nhật trên hàng trong bảng mẹ sẽ được khôi phục.

CASCADE
Các hàng tương ứng được cập nhật trong bảng tham chiếu khi hàng đó được cập nhật trong bảng mẹ.

ĐẶT ĐẦY ĐỦ
Tất cả các giá trị tạo nên khóa ngoại được đặt thành NULL khi hàng tương ứng trong bảng mẹ được cập nhật. Để ràng buộc này thực thi, các cột khóa ngoại phải không có giá trị.

ĐẶT ĐỊNH NGHĨA
Tất cả các giá trị tạo nên khóa ngoại được đặt thành giá trị mặc định của chúng khi hàng tương ứng trong bảng mẹ được cập nhật. Để ràng buộc này thực thi, tất cả các cột khóa ngoại phải có định nghĩa mặc định. Nếu một cột là giá trị rỗng và không có bộ giá trị mặc định rõ ràng, NULL sẽ trở thành giá trị mặc định ngầm định của cột.

Không chỉ định CASCADE nếu bảng sẽ được đưa vào một ấn phẩm hợp nhất sử dụng các bản ghi lôgic. Để biết thêm thông tin về bản ghi lôgic, hãy xem Thay đổi của Nhóm đối với các Hàng liên quan có Bản ghi lôgic .

ONDATE CASCADE , SET NULL hoặc SET DEFAULT không thể được xác định nếu trình kích hoạt INSTEAD OF < mã> BẬT CẬP NHẬT đã tồn tại trên bảng đang được thay đổi.

Ví dụ: trong cơ sở dữ liệu AdventureWorks2012 , bảng ProductVendor có mối quan hệ tham chiếu với bảng Nhà cung cấp : ProductVendor.BusinessEntity khóa ngoại tham chiếu đến khóa chính Vendor.BusinessEntityID .

Nếu một câu lệnh CẬP NHẬT được thực thi trên một hàng trong bảng Nhà cung cấp và hành động CASCADE BẬT CẬP NHẬT được chỉ định cho ProductVendor.BusinessEntityID , Công cụ Cơ sở dữ liệu sẽ kiểm tra một hoặc nhiều hàng phụ thuộc trong bảng ProductVendor . Nếu có, các hàng phụ thuộc trong bảng ProductVendor sẽ được cập nhật và cả hàng được tham chiếu trong bảng Nhà cung cấp .

Ngược lại, nếu KHÔNG CÓ HÀNH ĐỘNG nào được chỉ định, Công cụ cơ sở dữ liệu sẽ tạo ra lỗi và khôi phục hành động cập nhật trên hàng Nhà cung cấp nếu có ít nhất một hàng trong mã ProductVendor bảng tham chiếu đến nó.

KIỂM TRA
Là một ràng buộc thực thi tính toàn vẹn của miền bằng cách giới hạn các giá trị khả dĩ có thể được nhập vào một cột hoặc các cột. Ràng buộc KIỂM TRA trên các cột được tính toán cũng phải được đánh dấu ĐÃ CÓ.

logic_expression
Là một biểu thức logic trả về TRUE hoặc FALSE. Kiểu dữ liệu bí danh không được là một phần của biểu thức.

cột
Là một cột hoặc danh sách các cột, trong dấu ngoặc đơn, được sử dụng trong các ràng buộc bảng để chỉ ra các cột được sử dụng trong định nghĩa ràng buộc.

[ ASC | DESC]
Chỉ định thứ tự sắp xếp cột hoặc các cột tham gia vào các ràng buộc bảng. Giá trị mặc định là ASC.

partition_scheme_name
Là tên của lược đồ phân vùng xác định nhóm tệp mà các phân vùng của bảng được phân vùng sẽ được ánh xạ. Lược đồ phân vùng phải tồn tại trong cơ sở dữ liệu.

[_partition_column_name **. **]
Chỉ định cột mà một bảng được phân vùng sẽ được phân vùng. Cột phải khớp với cột được chỉ định trong hàm phân vùng mà partition_scheme_name đang sử dụng về kiểu dữ liệu, độ dài và độ chính xác. Một cột được tính toán tham gia vào một chức năng phân vùng phải được đánh dấu rõ ràng là ĐÃ CÓ.

Quan trọng

Chúng tôi khuyên bạn nên chỉ định KHÔNG ĐẦY ĐỦ trên cột phân vùng của các bảng được phân vùng và cả các bảng không được phân vùng là nguồn hoặc mục tiêu của các thao tác CHUYỂN ĐỔI ... Làm điều này đảm bảo rằng mọi ràng buộc KIỂM TRA trên các cột phân vùng không phải kiểm tra các giá trị rỗng.

VỚI FILLFACTOR = fillfactor
Chỉ định mức độ đầy đủ của Công cụ cơ sở dữ liệu sẽ tạo ra mỗi trang chỉ mục được sử dụng để lưu trữ dữ liệu chỉ mục. Giá trị hệ số lấp đầy do người dùng chỉ định có thể từ 1 đến 100. Nếu giá trị không được chỉ định, giá trị mặc định là 0. Giá trị hệ số lấp đầy 0 và 100 giống nhau về mọi mặt.

Quan trọng

Việc ghi tài liệu với FILLFACTOR = fillfactor làm tùy chọn chỉ mục duy nhất áp dụng cho các ràng buộc CHÍNH hoặc UNIQUE được duy trì để tương thích ngược, nhưng sẽ không được ghi lại theo cách này trong các bản phát hành trong tương lai.

column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
Là 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. Để 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 .

PERIOD FOR SYSTEM_TIME (system_start_time_column_name, system_end_time_column_name)
Áp dụng cho : SQL Server (SQL Server 2016 (13.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ẽ sử dụng để ghi lại khoảng thời gian mà một bản ghi hợp lệ. Sử dụng đối số này kết hợp với ĐƯỢC TẠO LUÔN NHƯ ROW {START | Các đối số END} WITH SYSTEM_VERSIONING = ON để tạo một bảng tạm thời. Để biết thêm thông tin, hãy xem Bảng tạm .

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

Đối với tối ưu hóa bộ nhớ, độ trễ chỉ định số phút tối thiểu mà một hàng phải duy trì trong bảng, không thay đổi, trước khi đủ điều kiện để nén vào chỉ mục columnstore. SQL Server chọn các hàng cụ thể để nén theo thời gian cập nhật cuối cùng của chúng. Ví dụ: nếu các hàng thay đổi thường xuyên trong khoảng thời gian hai giờ, bạn có thể đặt COMPRESSION_DELAY = 120 Phút để đảm bảo cập nhật hoàn tất trước khi SQL Server nén hàng.

Đối với bảng dựa trên đĩa, độ trễ chỉ định số phút tối thiểu mà một nhóm hàng delta ở trạng thái ĐÃ ĐÓNG CỬA phải duy trì trong nhóm hàng delta trước khi SQL Server có thể nén nó vào nhóm hàng đã nén. Vì các bảng dựa trên đĩa không theo dõi thời gian chèn và cập nhật trên các hàng riêng lẻ, SQL Server áp dụng độ trễ cho các nhóm hàng delta ở trạng thái ĐÃ ĐÓNG CỬA.

Giá trị mặc định là 0 phút.

Để biết các đề xuất về thời điểm sử dụng COMPRESSION_DELAY , vui lòng xem Bắt đầu với Columnstore để biết phân tích hoạt động theo thời gian thực

& lt; table_option & gt; :: =
Chỉ định một hoặc nhiều tùy chọn bảng.

DATA_COMPRESSION
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 CÓ
Bảng hoặc các phân vùng được chỉ định không được nén.

ROW
Bảng hoặc các phân vùng cụ thể được nén bằng cách sử dụng nén hàng.

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.

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

Chỉ áp dụng cho các chỉ mục cửa hàng cột, bao gồm cả chỉ mục cửa hàng cột không hợp nhất và chỉ mục cửa hàng cột theo nhóm. COLUMNSTORE chỉ định nén bằng cách nén columnstore hiệu quả nhất. Đây là sự lựa chọn điển hình.

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

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

Để biết thêm thông tin, 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.

TRÊN CÁC PHẦN ( { & lt; partition_number_expression & gt; | [, ... n] )
Chỉ định các phân vùng áp dụng cài đặt DATA_COMPRESSION hoặc XML_COMPRESSION . Nếu bảng không được phân vùng, đối số ON PARTITIONS sẽ tạo ra lỗi. Nếu mệnh đề ON PARTITIONS không được cung cấp, tùy chọn DATA_COMPRESSION sẽ áp dụng cho tất cả các phân vùng của bảng được phân vùng.

Lưu ý

XML_COMPRESSION chỉ khả dụng bắt đầu với Bản xem trước SQL Server 2022 (16.x) và Bản xem trước cơ sở dữ liệu Azure SQL.

partition_number_expression có thể được chỉ định theo những cách sau:

  • Cung cấp số phân vùng của một phân vùng, ví dụ: ON PARTITIONS (2)
  • Cung cấp số phân vùng cho một số phân vùng riêng lẻ được phân tách bằng dấu phẩy, ví dụ: ON PARTITIONS (1, 5)
  • Cung cấp cả phạm vi và phân vùng riêng lẻ, ví dụ: ON PARTITIONS (2, 4, 6 TO 8)

& lt; range & gt; có thể được chỉ định làm số phân vùng được phân tách bằng từ TO, ví dụ: ON PARTITIONS (6 TO 8) .

Để đặt các kiểu nén dữ liệu khác nhau cho các phân vùng khác nhau, hãy chỉ định tùy chọn DATA_COMPRESSION nhiều lần, ví dụ:

  VỚI
(
    DATA_COMPRESSION = KHÔNG CÓ PHẦN (1),
    DATA_COMPRESSION = ROW TRÊN CÁC PHẦN (2, 4, 6 ĐẾN 8),
    DATA_COMPRESSION = TRANG TRÊN CÁC PHẦN (3, 5)
)
 

Bạn cũng có thể chỉ định tùy chọn XML_COMPRESSION nhiều lần, ví dụ:

  VỚI
(
  XML_COMPRESSION = TẮT TRÊN CÁC PHẦN (1),
  XML_COMPRESSION = BẬT TRÊN CÁC PHẦN (2, 4, 6 ĐẾN 8),
  XML_COMPRESSION = TẮT TRÊN CÁC PHẦN (3, 5)
);
 

& lt; index_option & gt; :: =
Chỉ định một hoặc nhiều tùy chọn chỉ mục. Để có mô tả đầy đủ về các tùy chọn này, hãy xem TẠO CHỈ SỐ .

PAD_INDEX = {BẬT | TẮT }
Khi BẬT, phần trăm dung lượng trống do FILLFACTOR chỉ định sẽ được áp dụng cho các trang cấp trung gian của chỉ mục. Khi TẮT hoặc giá trị FILLFACTOR mà nó không được chỉ định, các trang cấp trung gian sẽ được lấp đầy gần hết dung lượng để lại đủ không gian cho ít nhất một hàng có kích thước tối đa mà chỉ mục có thể có, xem xét tập hợp các khóa trên các trang trung gian. Mặc định là TẮT.

FILLFACTOR = fillfactor
Chỉ định một tỷ lệ phần trăm cho biết mức độ đầy đủ của Công cụ cơ sở dữ liệu sẽ tạo ra mức độ hoàn chỉnh của mỗi trang chỉ mục trong quá trình tạo hoặc thay đổi chỉ mục. fillfactor phải là một giá trị số nguyên từ 1 đến 100. Giá trị mặc định là 0. Giá trị hệ số điền 0 và 100 giống nhau về mọi mặt.

IGNORE_DUP_KEY = {BẬT | TẮT }
Chỉ định phản hồi lỗi khi thao tác chèn cố gắng chèn các giá trị khóa trùng lặp vào một chỉ mục duy nhất. Tùy chọn IGNORE_DUP_KEY chỉ áp dụng cho các hoạt động chèn sau khi chỉ mục được tạo hoặc xây dựng lại. Tùy chọn không có hiệu lực khi thực thi CREATE INDEX , ALTER INDEX hoặc UPDATE . Mặc định là TẮT.

BẬT
Thông báo cảnh báo sẽ xảy ra khi các giá trị khóa trùng lặp được chèn vào một chỉ mục duy nhất. Chỉ những hàng vi phạm giới hạn tính duy nhất mới bị lỗi.

TẮT
Thông báo lỗi sẽ xảy ra khi các giá trị khóa trùng lặp được chèn vào một chỉ mục duy nhất. Toàn bộ thao tác INSERT sẽ được khôi phục.

IGNORE_DUP_KEY không thể được đặt thành BẬT cho các chỉ mục được tạo trên một chế độ xem, chỉ mục không phải duy nhất, chỉ mục XML, chỉ mục không gian và chỉ mục đã lọc.

Để xem IGNORE_DUP_KEY , hãy sử dụng sys.indexes .

Theo cú pháp tương thích ngược, WITH IGNORE_DUP_KEY tương đương với WITH IGNORE_DUP_KEY = ON .

STATISTICS_NORECOMPUTE = {BẬT | TẮT }
Khi BẬT, thống kê chỉ mục lỗi thời không được tính toán lại tự động. Khi TẮT, cập nhật thống kê tự động được bật. Mặc định là TẮT.

ALLOW_ROW_LOCKS = { BẬT | TẮT}
Khi BẬT, cho phép khóa hàng khi bạn truy cập chỉ mục. Cơ sở dữ liệu xác định khi nào các khóa hàng được sử dụng. Khi TẮT, các khóa hàng không được sử dụng. Mặc định là BẬT.

ALLOW_PAGE_LOCKS = { BẬT | TẮT}
Khi BẬT, cho phép khóa trang khi bạn truy cập chỉ mục. Cơ sở dữ liệu xác định thời điểm sử dụng khóa trang. Khi TẮT, khóa trang không được sử dụng. Mặc định là BẬT.

OPTIMIZE_FOR_SEQUENTIAL_KEY = {BẬT | TẮT }
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2019 (15.x)), Cơ sở dữ liệu Azure SQL và Phiên bản Azure SQL Managed.
Chỉ định có tối ưu hóa cho tranh chấp chèn trang cuối hay không. Mặc định là TẮT. Xem phần Khóa tuần tự trên trang TẠO CHỈ SỐ để biết thêm thông tin.

FILETABLE_DIRECTORY = directory_name
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2012 (11.x)).

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 kể cài đặt đối chiếu. Nếu giá trị này không được chỉ định, tên của món thịt xay sẽ được sử dụng.

FILETABLE_COLLATE_FILENAME = {collation_name | database_default}
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2012 (11.x)). Cơ sở dữ liệu Azure SQL và Phiên bản được quản lý SQL Azure không hỗ trợ FILETABLE .

Chỉ định tên của đối chiếu sẽ được áp dụng cho cột Tên trong FileTable. Đối chiếu phải không phân biệt chữ hoa chữ thường để tuân thủ ngữ nghĩa đặt tên tệp của hệ điều hành Windows. Nếu giá trị này không được chỉ định, đối chiếu mặc định của cơ sở dữ liệu sẽ được sử dụng. Nếu đối chiếu mặc định của cơ sở dữ liệu có phân biệt chữ hoa chữ thường, thì sẽ xảy ra lỗi và thao tác TẠO BẢNG không thành công.

collation_name
Tên của đối chiếu không phân biệt chữ hoa chữ thường.

database_default
Chỉ định rằng đối chiếu mặc định cho cơ sở dữ liệu sẽ được sử dụng. Đối chiếu này phải không phân biệt chữ hoa chữ thường.

FILETABLE_PRIMARY_KEY_CONSTRAINT_NAME = tên_chỉ
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2012 (11.x)). Cơ sở dữ liệu Azure SQL và Phiên bản được quản lý SQL Azure không hỗ trợ FILETABLE .

Chỉ định tên được sử dụng cho ràng buộc khóa chính được tạo tự động trên FileTable. Nếu giá trị này không được chỉ định, hệ thống sẽ tạo tên cho ràng buộc.

FILETABLE_STREAMID_UNIQUE_CONSTRAINT_NAME = bind_name
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2012 (11.x)). Cơ sở dữ liệu Azure SQL và Phiên bản được quản lý SQL Azure không hỗ trợ FILETABLE .

Chỉ định tên được sử dụng cho ràng buộc duy nhất được tạo tự động trên cột stream_id trong FileTable. Nếu giá trị này không được chỉ định, hệ thống sẽ tạo tên cho ràng buộc.

FILETABLE_FULLPATH_UNIQUE_CONSTRAINT_NAME = bind_name
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2012 (11.x)). Cơ sở dữ liệu Azure SQL và Phiên bản được quản lý SQL Azure không hỗ trợ FILETABLE .

Chỉ định tên được sử dụng cho ràng buộc duy nhất được tạo tự động trên cột parent_path_locator name trong FileTable. Nếu giá trị này không được chỉ định, hệ thống sẽ tạo tên cho ràng buộc.

SYSTEM_VERSIONING = BẬT [(HISTORY_TABLE = schema_name .history_table_name [, DATA_CONSISTENCY_CHECK = { BẬT | TẮT} ])]
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2016 (13.x)), Cơ sở dữ liệu Azure SQL và Phiên bản Azure SQL Managed.

Cho phép lập phiên bản hệ thống của bảng nếu đáp ứng các yêu cầu về kiểu dữ liệu, ràng buộc tính nullability và ràng buộc khóa chính. 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 tên của bảng lịch sử được chỉ định trong quá trình tạo bảng lịch sử, bạn phải chỉ định lược đồ và tên bảng. 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 khớp với lược đồ của bảng hiện tại trong cùng nhóm tệp với 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ử. Theo mặc định, bảng lịch sử được nén PAGE . Nếu đối số HISTORY_TABLE được sử dụng để tạo liên kết đến và sử dụng bảng lịch sử hiện có, liên kết sẽ được tạo giữa bảng hiện tại và bảng được chỉ định. Nếu bảng hiện tại được phân vùng, bảng lịch sử được tạo trên nhóm tệp mặc định vì cấu hình phân vùng không được sao chép tự động từ bảng hiện tại sang bảng lịch sử. 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. Thực hiện kiểm tra tính nhất quán của dữ liệu là mặc định. Sử dụng đối số này kết hợp với PERIOD FOR SYSTEM_TIME GENERATED ALWAYS AS ROW {START | END} đối số để bật lập phiên bản hệ thống trên bảng. Để biết thêm thông tin, hãy xem Bảng tạm . Sử dụng đối số này với đối số WITH LEDGER = ON để tạo bảng sổ cái có thể cập nhật. Không được phép sử dụng bảng lịch sử hiện có với bảng sổ cái.

REMOTE_DATA_ARCHIVE = {ON [(table_stretch_options [, ... n])] | TẮT (MIGRATION_STATE = PAUSED)}
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2016 (13.x)).

Tạo bảng mới với Cơ sở dữ liệu Stretch được bật hoặc tắt. Để biết thêm thông tin, hãy xem Stretch Database .

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ó thể tùy chọn chỉ định MIGRATION_STATE = OUTBOUND để bắt đầu di chuyển dữ liệu ngay lập tức hoặc MIGRATION_STATE = PAUSED để 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 phần 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.

[FILTER_PREDICATE = {NULL | vị ngữ}]
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2016 (13.x)).

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 kéo dài cho bảng Chọn các hàng để di chuyển bằng cách sử dụng chức năng bộ lọc .

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 (Bắt đầu với SQL Server 2016 (13.x)), Cơ sở dữ liệu Azure SQL và Phiên bản Azure SQL Managed.

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

  • Chỉ định INBOUND để sao chép dữ liệu từ xa cho bảng từ Cơ sở dữ liệu Azure SQL 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 cơ sở dữ liệu .

[DATA_DELETION = BẬT
{(
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}
)}
]
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 trữ 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
    | 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.

MEMORY_OPTIMIZED
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2014 (12.x)), Cơ sở dữ liệu Azure SQL và Phiên bản Azure SQL Managed. Azure SQL Managed Instance không hỗ trợ các bảng được tối ưu hóa bộ nhớ trong cấp Mục đích Chung.

Giá trị BẬT cho biết bảng được tối ưu hóa bộ nhớ. Các bảng được tối ưu hóa bộ nhớ là một phần của tính năng OLTP trong bộ nhớ, được sử dụng để tối ưu hóa hiệu suất xử lý giao dịch. Để bắt đầu với OLTP trong bộ nhớ, hãy xem Bắt đầu nhanh 1: Công nghệ OLTP trong bộ nhớ cho hiệu suất Transact-SQL nhanh hơn . Để biết thêm thông tin chuyên sâu về các bảng được tối ưu hóa bộ nhớ, hãy xem Bảng được tối ưu hóa bộ nhớ .

Giá trị mặc định TẮT cho biết rằng bảng dựa trên đĩa.

KHẢ NĂNG DÀI HẠN
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2014 (12.x)), Cơ sở dữ liệu Azure SQL và Phiên bản Azure SQL Managed.

Giá trị của SCHEMA_AND_DATA cho biết rằng bảng bền, nghĩa là các thay đổi vẫn tồn tại trên đĩa và vẫn tồn tại khi khởi động lại hoặc chuyển đổi dự phòng. SCHEMA_AND_DATA là giá trị mặc định.

Giá trị của SCHEMA_ONLY cho biết rằng bảng không bền. Lược đồ bảng vẫn tồn tại nhưng bất kỳ cập nhật dữ liệu nào sẽ không tồn tại khi khởi động lại hoặc chuyển đổi dự phòng cơ sở dữ liệu. DURABILITY = SCHEMA_ONLY chỉ được phép với MEMORY_OPTIMIZED = ON .

Cảnh báo

Khi một bảng được tạo bằng DURABILITY = SCHEMA_ONLY READ_COMMITTED_SNAPSHOT sau đó được thay đổi bằng cách sử dụng ALTER DATABASE , dữ liệu trong bảng sẽ bị mất .

BUCKET_COUNT
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2014 (12.x), Cơ sở dữ liệu Azure SQL và Phiên bản được quản lý SQL Azure.

Cho biết số lượng nhóm sẽ được tạo trong chỉ mục băm. Giá trị tối đa cho BUCKET_COUNT trong chỉ mục băm là 1,073,741,824. Để biết thêm thông tin về số lượng nhóm, hãy xem Chỉ mục cho bảng được tối ưu hóa bộ nhớ .

Bucket_count là đối số bắt buộc.

INDEX
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2014 (12.x)), Cơ sở dữ liệu Azure SQL và Phiên bản Azure SQL Managed.

Chỉ mục cột và bảng có thể được chỉ định như một phần của câu lệnh CREATE TABLE. Để biết chi tiết về cách thêm và xóa chỉ mục trên các bảng được tối ưu hóa bộ nhớ, hãy xem Thay đổi bảng được tối ưu hóa bộ nhớ

HASH
Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2014 (12.x)), Cơ sở dữ liệu Azure SQL và Phiên bản Azure SQL Managed.

Cho biết rằng chỉ mục HASH đã được tạo.

Chỉ mục băm chỉ được hỗ trợ trên các bảng được tối ưu hóa bộ nhớ.

LEDGER = ON (& lt; ledger_option & gt; [,… n]) | TẮT
Áp dụng cho: SQL Server 2022, Cơ sở dữ liệu Azure SQL.

Lưu ý

Nếu câu lệnh tạo một bảng sổ cái, thì quyền ENABLE LEDGER là bắt buộc.

Cho biết bảng đang được tạo có phải là bảng sổ cái (BẬT) hay không (TẮT). Mặc định là TẮT. Nếu tùy chọn APPEND_ONLY = ON được chỉ định, hệ thống sẽ tạo một bảng sổ cái chỉ phụ thêm cho phép chỉ chèn các hàng mới. Nếu không, hệ thống sẽ tạo một bảng sổ cái có thể cập nhật. Một bảng sổ cái có thể cập nhật cũng yêu cầu đối số SYSTEM_VERSIONING = ON . Một bảng sổ cái có thể cập nhật cũng phải là một bảng được phiên bản hệ thống. Tuy nhiên, bảng sổ cái có thể cập nhật không nhất thiết phải là một bảng tạm thời (nó không yêu cầu tham số PERIOD FOR SYSTEM_TIME ). Nếu bảng lịch sử được chỉ định bằng LEDGER = ON SYSTEM_VERSIONING = ON , nó không được tham chiếu đến bảng hiện có.

Cơ sở dữ liệu sổ cái (cơ sở dữ liệu được tạo bằng tùy chọn LEDGER = ON ) chỉ cho phép tạo các bảng sổ cái. Các nỗ lực tạo bảng với LEDGER = OFF sẽ gây ra lỗi. Theo mặc định, mỗi bảng mới được tạo dưới dạng một bảng sổ cái có thể cập nhật, ngay cả khi bạn không chỉ định LEDGER = ON và sẽ được tạo với các giá trị mặc định cho tất cả các tham số khác.


Một bảng sổ cái có thể cập nhật phải chứa bốn cột ĐƯỢC TẠO LUÔN LUÔN , chính xác là một cột được xác định với mỗi đối số sau:

  • ĐƯỢC TẠO LUÔN KHI BẮT ĐẦU TRANSACTION_ID
  • ĐƯỢC TẠO LUÔN LÀ TRANSACTION_ID HẾT
  • ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER START
  • ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER END

Một bảng sổ cái chỉ phần phụ phải chứa chính xác một cột được xác định với mỗi đối số sau:

  • ĐƯỢC TẠO LUÔN KHI BẮT ĐẦU TRANSACTION_ID
  • ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER START

Nếu bất kỳ cột nào trong số các cột luôn được tạo bắt buộc không được xác định trong câu lệnh CREATE TABLE và câu lệnh bao gồm LEDGER = ON , hệ thống sẽ tự động cố gắng thêm cột sử dụng định nghĩa cột có thể áp dụng từ danh sách dưới đây. Nếu có xung đột tên với cột đã được xác định, hệ thống sẽ phát sinh lỗi.

  • [ledger_start_transaction_id] BIGINT ĐƯỢC TẠO LUÔN NHƯ TRANSACTION_ID BẮT ĐẦU CHƯA ĐỦ
  • [ledger_end_transaction_id] BIGINT ĐƯỢC TẠO LUÔN NHƯ TRANSACTION_ID KẾT THÚC HIDDEN NULL
  • [ledger_start_sequence_number] LỚN ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER BẮT ĐẦU CHƯA ĐỦ
  • [ledger_end_sequence_number] LỚN ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER KẾT THÚC HIDDEN NULL

& lt; ledger_view_option & gt; chỉ định lược đồ và tên của chế độ xem sổ cái , hệ thống sẽ tự động tạo và liên kết đến bảng. Nếu tùy chọn không được chỉ định, hệ thống sẽ tạo tên chế độ xem sổ cái bằng cách thêm _Ledger vào tên của bảng đang được tạo ( database_name.schema_name.table_name ). Nếu một dạng xem có tên được chỉ định hoặc được tạo tồn tại, hệ thống sẽ phát sinh lỗi. Nếu bảng là một bảng sổ cái có thể cập nhật, thì dạng xem sổ cái sẽ được tạo dưới dạng một kết hợp trên bảng và bảng lịch sử của nó.
Mỗi hàng trong chế độ xem sổ cái đại diện cho việc tạo hoặc xóa phiên bản hàng trong bảng sổ cái. Dạng xem sổ cái chứa tất cả các cột của bảng sổ cái, ngoại trừ các cột luôn được tạo được liệt kê ở trên. Chế độ xem sổ cái cũng chứa các cột bổ sung sau:

Tên cột dọc
Loại dữ liệu
Sự mô tả

Được chỉ định bằng cách sử dụng tùy chọn TRANSACTION_ID_COLUMN_NAME . ledger_transaction_id nếu không được chỉ định.
bigint
ID của giao dịch đã tạo hoặc xóa phiên bản hàng.

Được chỉ định bằng cách sử dụng tùy chọn SEQUENCE_NUMBER_COLUMN_NAME . ledger_sequence_number nếu không được chỉ định.
bigint
Số thứ tự của thao tác cấp hàng trong giao dịch trên bảng.

Được chỉ định bằng tùy chọn OPERATION_TYPE_COLUMN_NAME . ledger_operation_type nếu không được chỉ định.
tí hon
Chứa 1 ( INSERT ) hoặc 2 ( DELETE ). Chèn một hàng vào bảng sổ cái sẽ tạo ra một hàng mới trong chế độ xem sổ cái có chứa 1 trong cột này. Xóa một hàng khỏi bảng sổ cái sẽ tạo ra một hàng mới trong chế độ xem sổ cái có chứa 2 trong cột này. Cập nhật một hàng trong bảng sổ cái sẽ tạo ra hai hàng mới trong chế độ xem sổ cái. Một hàng chứa 2 ( DELETE ) và hàng còn lại chứa 1 ( INSERT ) trong cột này.

Được chỉ định bằng cách sử dụng tùy chọn OPERATION_TYPE_DESC_COLUMN_NAME . ledger_operation_type_desc nếu không được chỉ định.
nvarchar (128)
Chứa INSERT hoặc DELETE . Xem ở trên để biết chi tiết.

Các giao dịch bao gồm tạo bảng sổ cái được ghi lại trong sys.database_ledger_transactions .

& lt; ledger_option & gt; :: = Chỉ định tùy chọn sổ cái.

  • [LEDGER_VIEW = schema_name.ledger_view_name [(& lt; ledger_view_option & gt; [, ... n])] Chỉ định tên của chế độ xem sổ cái và tên của các cột bổ sung mà hệ thống thêm vào sổ cái xem.
  • [APPEND_ONLY = ON | TẮT] Chỉ định xem bảng sổ cái đang được tạo là chỉ thêm vào hay có thể cập nhật. Giá trị mặc định là OFF .


& lt; ledger_view_option & gt; :: = Chỉ định một hoặc nhiều tùy chọn chế độ xem sổ cái. Mỗi tùy chọn dạng xem sổ cái chỉ định tên của một cột, hệ thống sẽ thêm vào dạng xem, ngoài các cột được xác định trong bảng sổ cái.

  • [TRANSACTION_ID_COLUMN_NAME = transaction_id_column_name] Chỉ định tên của cột lưu trữ ID của giao dịch đã tạo hoặc xóa một phiên bản hàng. Tên cột mặc định là ledger_transaction_id .
  • [SEQUENCE_NUMBER_COLUMN_NAME = serial_number_column_name] Chỉ định tên của các cột lưu trữ số thứ tự của thao tác cấp hàng trong giao dịch trên bảng. Tên cột mặc định là ledger_sequence_number .
  • [OPERATION_TYPE_COLUMN_NAME = operation_type_id column_name] Chỉ định tên của các cột lưu trữ ID loại hoạt động. Tên cột mặc định là ledger_operation_type.
    - [OPERATION_TYPE_DESC_COLUMN_NAME = operation_type_desc_column_name] Chỉ định tên của các cột lưu trữ mô tả loại hoạt động. Tên cột mặc định là ledger_operation_type_desc .

Nhận xét

Để biết thông tin về số lượng bảng, cột, ràng buộc và chỉ mục được phép, hãy xem Thông số kỹ thuật về dung lượng tối đa cho SQL Server .

Không gian thường được phân bổ cho các bảng và chỉ mục theo mức tăng của một mức độ tại một thời điểm. Khi tùy chọn SET MIXED_PAGE_ALLOCATION của ALTER DATABASE được đặt thành TRUE, hoặc luôn trước SQL Server 2016 (13.x), khi một bảng hoặc chỉ mục được tạo, nó sẽ được phân bổ các trang từ các phạm vi hỗn hợp cho đến khi nó có đủ số trang để lấp đầy một phạm vi thống nhất. Sau khi nó có đủ số trang để lấp đầy một phạm vi thống nhất, một phạm vi khác sẽ được phân bổ mỗi khi các phạm vi được phân bổ hiện tại trở nên đầy. Đối với báo cáo về lượng không gian được phân bổ và sử dụng bởi một bảng, hãy thực thi sp_spaceused .

Công cụ cơ sở dữ liệu không thực thi thứ tự trong đó các ràng buộc DEFAULT, IDENTITY, ROWGUIDCOL hoặc cột được chỉ định trong định nghĩa cột.

Khi một bảng được tạo, tùy chọn QUOTED IDENTIFIER luôn được lưu trữ ở dạng BẬT trong siêu dữ liệu cho bảng, ngay cả khi tùy chọn được đặt thành TẮT khi tạo bảng.

Bảng tạm thời

Bạn có thể tạo các bảng tạm thời cục bộ và toàn cầu. Các bảng tạm thời cục bộ chỉ hiển thị trong phiên hiện tại và các bảng tạm thời chung được hiển thị cho tất cả các phiên. Bảng tạm thời không thể được phân vùng.

Đặt tiền tố cho tên bảng tạm thời cục bộ bằng dấu số đơn (#table_name) và tiền tố tên bảng tạm thời toàn cục bằng dấu số đôi (## table_name).

Câu lệnh Transact-SQL tham chiếu đến bảng tạm thời bằng cách sử dụng giá trị được chỉ định cho tên_bảng trong câu lệnh CREATE TABLE , ví dụ:

  TẠO BẢNG #MyTempTable (
    col1 INT PRIMARY KEY
);

CHÈN VÀO #MyTempTable
GIÁ TRỊ (1);
 

Nếu nhiều bảng tạm thời được tạo bên trong một quy trình hoặc lô được lưu trữ duy nhất, chúng phải có các tên khác nhau.

Nếu bạn bao gồm một schema_name khi bạn tạo hoặc truy cập một bảng tạm thời, nó sẽ bị bỏ qua. Tất cả các bảng tạm thời được tạo trong lược đồ dbo.

Nếu một bảng tạm thời cục bộ được tạo trong một thủ tục hoặc ứng dụng được lưu trữ có thể được thực thi đồng thời bởi nhiều phiên, thì Công cụ cơ sở dữ liệu phải có khả năng phân biệt các bảng được tạo bởi các phiên khác nhau. Công cụ cơ sở dữ liệu thực hiện điều này bằng cách thêm vào bên trong một hậu tố số vào mỗi tên bảng tạm thời cục bộ. Tên đầy đủ của bảng tạm thời được lưu trong bảng sys.sysobjects trong tempdb được tạo thành từ tên bảng được chỉ định trong câu lệnh CREATE TABLE và hậu tố số do hệ thống tạo. Để cho phép hậu tố, table_name được chỉ định cho tên tạm thời cục bộ không được vượt quá 116 ký tự.

Các bảng tạm thời sẽ tự động bị loại bỏ khi chúng vượt ra ngoài phạm vi, trừ khi bị loại bỏ một cách rõ ràng bằng cách sử dụng DROP TABLE:

  • Một bảng tạm thời cục bộ được tạo trong một thủ tục đã lưu trữ sẽ tự động bị loại bỏ khi quá trình lưu trữ kết thúc. Bảng có thể được tham chiếu bởi bất kỳ thủ tục lưu trữ lồng nhau nào được thực thi bởi thủ tục được lưu trữ đã tạo ra bảng. Không thể tham chiếu bảng bởi quy trình được gọi là quy trình được lưu trữ đã tạo ra bảng.
  • Tất cả các bảng tạm thời cục bộ khác sẽ tự động bị xóa vào cuối phiên hiện tại.
  • Các bảng tạm thời chung sẽ tự động bị loại bỏ khi phiên tạo bảng kết thúc và tất cả các tác vụ khác đã ngừng tham chiếu đến chúng. Mối liên kết giữa một nhiệm vụ và một bảng chỉ được duy trì trong vòng đời của một câu lệnh Transact-SQL. Điều này có nghĩa là một bảng tạm thời toàn cục sẽ bị loại bỏ khi hoàn thành câu lệnh Transact-SQL cuối cùng đang tích cực tham chiếu đến bảng khi phiên tạo kết thúc.

Một bảng tạm thời cục bộ được tạo trong một thủ tục hoặc trình kích hoạt được lưu trữ có thể có cùng tên với một bảng tạm thời đã được tạo trước khi thủ tục hoặc trình kích hoạt được lưu trữ được gọi. Tuy nhiên, nếu truy vấn tham chiếu đến một bảng tạm thời và hai bảng tạm thời có cùng tên tồn tại tại thời điểm đó, nó sẽ không được xác định bảng nào mà truy vấn được giải quyết dựa trên. Các thủ tục được lưu trữ lồng nhau cũng có thể tạo các bảng tạm thời có cùng tên với một bảng tạm thời được tạo bởi thủ tục được lưu trữ đã gọi nó. Tuy nhiên, đối với các sửa đổi nhằm giải quyết bảng đã được tạo trong thủ tục lồng nhau, bảng phải có cùng cấu trúc, với các tên cột giống như bảng được tạo trong thủ tục gọi. Điều này được thể hiện trong ví dụ sau.

  TẠO THỦ TỤC dbo.Test2
BẰNG 
    TẠO BẢNG #t (x INT PRIMARY KEY);
    CHÈN VÀO CÁC GIÁ TRỊ #t (2);
    CHỌN Test2Col = x FROM #t;
ĐI

TẠO THỦ TỤC dbo.Test1
BẰNG 
    TẠO BẢNG #t (x INT PRIMARY KEY);
    CHÈN VÀO CÁC GIÁ TRỊ #t (1);
    CHỌN Test1Col = x FROM #t;
    Kiểm tra EXEC2;
ĐI

TẠO BẢNG #t (x INT PRIMARY KEY);
CHÈN VÀO CÁC GIÁ TRỊ #t (99);
ĐI

Kiểm tra EXEC1;
ĐI
 

Đây là tập hợp kết quả.

  (1 (các) hàng bị ảnh hưởng)
Test1Col
-----------
1

(1 hàng bị ảnh hưởng)
 Test2Col
 -----------
 2
 

Khi bạn tạo các bảng tạm thời cục bộ hoặc toàn cục, cú pháp CREATE TABLE hỗ trợ các định nghĩa ràng buộc ngoại trừ các ràng buộc FOREIGN KEY. Nếu một ràng buộc NGOẠI KHÓA được chỉ định trong bảng tạm thời, câu lệnh trả về một thông báo cảnh báo cho biết ràng buộc đã bị bỏ qua. Bảng vẫn được tạo mà không có ràng buộc NGOẠI KHÓA. Các bảng tạm thời không thể được tham chiếu trong các ràng buộc NGOẠI KHÓA.

Nếu một bảng tạm thời được tạo với một ràng buộc được đặt tên và bảng tạm thời được tạo trong phạm vi của một giao dịch do người dùng xác định, chỉ một người dùng tại một thời điểm có thể thực hiện câu lệnh tạo bảng tạm thời. Ví dụ: nếu một thủ tục được lưu trữ tạo ra một bảng tạm thời có ràng buộc khóa chính được đặt tên, thì thủ tục được lưu trữ không thể được thực thi đồng thời bởi nhiều người dùng.

Bảng tạm thời toàn cầu trong phạm vi cơ sở dữ liệu (Cơ sở dữ liệu Azure SQL)

Các bảng tạm thời chung cho SQL Server (bắt đầu bằng ## tên bảng) được lưu trữ trong tempdb và được chia sẻ giữa tất cả các phiên của người dùng trên toàn bộ phiên bản SQL Server. Để biết thông tin về các loại bảng SQL, hãy xem phần trên về Tạo bảng.

Cơ sở dữ liệu Azure SQL hỗ trợ các bảng tạm thời toàn cầu cũng được lưu trữ trong tempdb và phạm vi đến cấp cơ sở dữ liệu. Điều này có nghĩa là các bảng tạm thời chung được chia sẻ cho tất cả các phiên của người dùng trong cùng một Cơ sở dữ liệu Azure SQL. Phiên người dùng từ cơ sở dữ liệu khác không thể truy cập các bảng tạm thời chung.

Các bảng tạm thời toàn cầu cho Cơ sở dữ liệu SQL Azure tuân theo cú pháp và ngữ nghĩa giống như SQL Server sử dụng cho các bảng tạm thời. Tương tự, các thủ tục được lưu trữ tạm thời toàn cầu cũng được xác định phạm vi đến mức cơ sở dữ liệu trong Cơ sở dữ liệu Azure SQL. Các bảng tạm thời cục bộ (bắt đầu bằng # tên bảng) cũng được hỗ trợ cho Cơ sở dữ liệu Azure SQL và tuân theo cùng một cú pháp và ngữ nghĩa mà SQL Server sử dụng. Xem phần trên về Bảng tạm thời .

Quan trọng

Tính năng này có sẵn cho Cơ sở dữ liệu Azure SQL.

Khắc phục sự cố bảng tạm thời chung cho Cơ sở dữ liệu Azure SQL

Để khắc phục sự cố tempdb, hãy xem Cách giám sát việc sử dụng tempdb .

Lưu ý

Chỉ quản trị viên máy chủ mới có thể truy cập các DMV khắc phục sự cố trong Cơ sở dữ liệu Azure SQL.

Quyền

Bất kỳ người dùng nào cũng có thể tạo các đối tượng tạm thời toàn cầu. Người dùng chỉ có thể truy cập các đối tượng của riêng họ, trừ khi họ nhận được quyền bổ sung.

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

Trước khi tạo bảng được phân vùng bằng cách sử dụng TẠO BẢNG, trước tiên bạn phải tạo một hàm phân vùng để chỉ định cách bảng được phân vùng. Chức năng phân vùng được tạo bằng cách sử dụng CHỨC NĂNG TẠO PHẦN . Thứ hai, bạn phải tạo một lược đồ phân vùng để chỉ định các nhóm tệp sẽ chứa các phân vùng được chỉ ra bởi hàm phân vùng. Lược đồ phân vùng được tạo bằng cách sử dụng TẠO PHẦN LỊCH TRÌNH . Không thể chỉ định vị trí của các ràng buộc CHÍNH CHÍNH hoặc UNIQUE cho các nhóm tệp riêng biệt cho các bảng được phân vùng. Để biết thêm thông tin, hãy xem Bảng và chỉ mục được phân vùng .

Ràng buộc CHÍNH CHỦ YẾU

  • Một bảng chỉ có thể chứa một ràng buộc CHÍNH CHÍNH.

  • Chỉ mục được tạo bởi ràng buộc CHÍNH CHÍNH không thể khiến số lượng chỉ mục trên bảng vượt quá 999 chỉ mục không phân nhóm và 1 chỉ mục theo nhóm.

  • Nếu CLUSTERED hoặc NONCLUSTERED không được chỉ định cho ràng buộc CHÍNH CHÍNH, CLUSTERED được sử dụng nếu không có chỉ mục nhóm nào được chỉ định cho các ràng buộc UNIQUE.

  • Tất cả các cột được xác định trong ràng buộc CHÍNH CHÍNH phải được định nghĩa là KHÔNG ĐẦY ĐỦ. Nếu khả năng vô hiệu không được chỉ định, tất cả các cột tham gia vào ràng buộc CHÍNH CHÍNH có khả năng vô hiệu được đặt thành KHÔNG ĐỦ.

    Lưu ý

    Đối với các bảng được tối ưu hóa bộ nhớ, cột khóa có thể trống được cho phép.

  • Nếu khóa chính được xác định trên cột kiểu do người dùng xác định CLR, thì việc triển khai kiểu phải hỗ trợ thứ tự nhị phân. Để biết thêm thông tin, hãy xem CLR Các loại do người dùng xác định .

Ràng buộc DUY NHẤT

  • Nếu CLUSTERED hoặc NONCLUSTERED không được chỉ định cho ràng buộc UNIQUE, thì NONCLUSTERED được sử dụng theo mặc định.
  • Mỗi ràng buộc UNIQUE tạo ra một chỉ mục. Số lượng ràng buộc DUY NHẤT không thể khiến số lượng chỉ mục trên bảng vượt quá 999 chỉ mục không phân nhóm và 1 chỉ mục theo nhóm.
  • Nếu một ràng buộc duy nhất được xác định trên cột kiểu do người dùng xác định CLR, thì việc triển khai kiểu phải hỗ trợ thứ tự nhị phân hoặc dựa trên toán tử. Để biết thêm thông tin, hãy xem CLR Các loại do người dùng xác định .

Ràng buộc NGOẠI KHÓA

  • Khi một giá trị không phải NULL được nhập vào cột của ràng buộc NGOẠI KHÓA, giá trị đó phải tồn tại trong cột được tham chiếu; nếu không, thông báo lỗi vi phạm khóa ngoại được trả về.

  • Các ràng buộc NGOẠI KHÓA được áp dụng cho cột trước đó, trừ khi các cột nguồn được chỉ định.

  • Ràng buộc NGOẠI KHÓA chỉ có thể tham chiếu các bảng trong cùng một cơ sở dữ liệu trên cùng một máy chủ. Tính toàn vẹn tham chiếu cơ sở dữ liệu chéo phải được thực hiện thông qua các trình kích hoạt. Để biết thêm thông tin, hãy xem TẠO TRIGGER .

  • Các ràng buộc NGOẠI KHÓA có thể tham chiếu đến một cột khác trong cùng một bảng. Đây được coi là tài liệu tự tham khảo.

  • Mệnh đề TÀI LIỆU THAM KHẢO của ràng buộc NGOẠI KHÓA cấp cột chỉ có thể liệt kê một cột tham chiếu. Cột này phải có cùng kiểu dữ liệu với cột mà ràng buộc được xác định.

  • Mệnh đề REFERENCES của ràng buộc NGOẠI KHÓA cấp bảng phải có cùng số cột tham chiếu với số cột trong danh sách cột ràng buộc. Kiểu dữ liệu của mỗi cột tham chiếu cũng phải giống với cột tương ứng trong danh sách cột. Các cột tham chiếu phải được chỉ định theo cùng thứ tự đã được sử dụng khi chỉ định các cột của khóa chính hoặc ràng buộc duy nhất trên bảng được tham chiếu.

  • Không thể chỉ định CASCADE, SET NULL hoặc SET DEFAULT nếu cột thuộc loại dấu thời gian là một phần của khóa ngoại hoặc khóa được tham chiếu.

  • Có thể kết hợp CASCADE, SET NULL, SET DEFAULT và NO ACTION trên các bảng có mối quan hệ tham chiếu với nhau. Nếu Cơ sở dữ liệu gặp KHÔNG CÓ HÀNH ĐỘNG, nó sẽ dừng và quay trở lại các hành động CASCADE, SET NULL và SET DEFAULT có liên quan. Khi câu lệnh DELETE tạo ra sự kết hợp của các hành động CASCADE, SET NULL, SET DEFAULT và NO ACTION, tất cả các hành động CASCADE, SET NULL và SET DEFAULT sẽ được áp dụng trước khi Database Engine kiểm tra bất kỳ hành động KHÔNG nào.

  • Công cụ Cơ sở dữ liệu không có giới hạn được xác định trước về số lượng ràng buộc NGOẠI KHÓA mà một bảng có thể chứa tham chiếu đến các bảng khác hoặc số lượng ràng buộc NGOẠI KHÓA được sở hữu bởi các bảng khác tham chiếu đến một bảng cụ thể .

    Tuy nhiên, số lượng ràng buộc NGOẠI KHÓA thực tế có thể được sử dụng bị giới hạn bởi cấu hình phần cứng cũng như thiết kế của cơ sở dữ liệu và ứng dụng. Chúng tôi khuyến nghị rằng một bảng chứa không quá 253 ràng buộc NGOẠI KHÓA và bảng được tham chiếu bởi không quá 253 ràng buộc NGOẠI KHÓA. Giới hạn hiệu quả cho bạn có thể nhiều hơn hoặc ít hơn tùy thuộc vào ứng dụng và phần cứng. Cân nhắc chi phí thực thi các ràng buộc NGOẠI KHÓA khi bạn thiết kế cơ sở dữ liệu và ứng dụng của mình.

  • Các ràng buộc NGOẠI KHÓA không được thực thi trên các bảng tạm thời.

  • Các ràng buộc NGOẠI KHÓA chỉ có thể tham chiếu các cột trong KHÓA CHÍNH hoặc các ràng buộc DUY NHẤT trong bảng được tham chiếu hoặc trong CHỈ SỐ DUY NHẤT trên bảng được tham chiếu.

  • Nếu khóa ngoại được xác định trên cột kiểu do người dùng xác định CLR, thì việc triển khai kiểu phải hỗ trợ thứ tự nhị phân. Để biết thêm thông tin, hãy xem CLR Các loại do người dùng xác định .

  • Các cột tham gia vào mối quan hệ khóa ngoài phải được xác định với cùng độ dài và tỷ lệ.

DEFAULT định nghĩa

  • Một cột chỉ có thể có một định nghĩa DEFAULT.

  • Định nghĩa DEFAULT có thể chứa các giá trị, hàm không đổi, hàm niladic chuẩn SQL hoặc NULL. Bảng sau đây cho thấy các hàm niladic và các giá trị mà chúng trả về mặc định trong một câu lệnh INSERT.

    Hàm niladic trong SQL-92
    Giá trị trả lại

    DẤU THỜI GIAN HIỆN TẠI
    Ngày và giờ hiện tại.

    NGƯỜI DÙNG HIỆN TẠI
    Tên người dùng thực hiện chèn.

    SESSION_USER
    Tên người dùng thực hiện chèn.

    SYSTEM_USER
    Tên người dùng thực hiện chèn.

    NGƯỜI SỬ DỤNG
    Tên người dùng thực hiện chèn.

  • const_expression trong định nghĩa DEFAULT không thể tham chiếu đến một cột khác trong bảng hoặc đến các bảng, dạng xem hoặc thủ tục được lưu trữ khác.

  • Không thể tạo định nghĩa DEFAULT trên các cột có kiểu dữ liệu dấu thời gian hoặc các cột có thuộc tính IDENTITY.

  • Không thể tạo định nghĩa DEFAULT cho các cột có kiểu dữ liệu bí danh nếu kiểu dữ liệu bí danh được liên kết với một đối tượng mặc định.

Ràng buộc KIỂM TRA

  • Một cột có thể có bất kỳ số lượng ràng buộc KIỂM TRA nào và điều kiện có thể bao gồm nhiều biểu thức logic kết hợp với AND và OR. Nhiều ràng buộc KIỂM TRA cho một cột được xác thực theo thứ tự chúng được tạo.

  • Điều kiện tìm kiếm phải đánh giá thành một biểu thức Boolean và không thể tham chiếu đến một bảng khác.

  • Ràng buộc KIỂM TRA cấp cột chỉ có thể tham chiếu cột bị ràng buộc và ràng buộc KIỂM TRA cấp bảng chỉ có thể tham chiếu các cột trong cùng một bảng.

    KIỂM TRA CONSTRAINTS và quy tắc có cùng chức năng xác thực dữ liệu trong các câu lệnh INSERT và UPDATE.

  • Khi tồn tại một quy tắc và một hoặc nhiều ràng buộc KIỂM TRA cho một cột hoặc các cột, tất cả các hạn chế sẽ được đánh giá.

  • Không thể xác định ràng buộc KIỂM TRA trên các cột văn bản , ntext hoặc hình ảnh .

Thông tin Ràng buộc Bổ sung

  • Không thể loại bỏ chỉ mục được tạo cho một ràng buộc bằng cách sử dụng DROP INDEX ; ràng buộc phải được loại bỏ bằng cách sử dụng ALTER TABLE . Chỉ mục được tạo và sử dụng bởi một ràng buộc có thể được tạo lại bằng cách sử dụng ALTER INDEX ... REBUILD . Để biết thêm thông tin, hãy xem Tổ chức lại và tạo lại chỉ mục .
  • Các tên ràng buộc phải tuân theo các quy tắc dành cho giá trị nhận dạng , ngoại trừ việc tên không được bắt đầu bằng dấu số (#). Nếu tên_kích_kích không được cung cấp, tên do hệ thống tạo sẽ được gán cho ràng buộc. Tên ràng buộc xuất hiện trong bất kỳ thông báo lỗi nào về các vi phạm ràng buộc.
  • Khi một ràng buộc bị vi phạm trong câu lệnh INSERT , UPDATE hoặc DELETE , câu lệnh sẽ kết thúc. Tuy nhiên, khi SET XACT_ABORT được đặt thành TẮT, giao dịch, nếu câu lệnh là một phần của giao dịch rõ ràng, sẽ tiếp tục được xử lý. Khi SET XACT_ABORT được đặt thành BẬT, toàn bộ giao dịch sẽ được khôi phục. Bạn cũng có thể sử dụng câu lệnh ROLLBACK TRANSACTION với định nghĩa giao dịch bằng cách kiểm tra chức năng hệ thống @@ ERROR .
  • Khi ALLOW_ROW_LOCKS = ON ALLOW_PAGE_LOCK = ON , các khóa cấp hàng, trang và bảng được cho phép khi bạn truy cập chỉ mục. Công cụ Cơ sở dữ liệu chọn khóa thích hợp và có thể chuyển khóa từ một hàng hoặc khóa trang sang khóa bảng. Khi ALLOW_ROW_LOCKS = OFF ALLOW_PAGE_LOCK = OFF , chỉ cho phép khóa cấp bảng khi bạn truy cập chỉ mục.
  • Nếu một bảng có KHÓA NGOẠI LỆ hoặc KIỂM TRA và kích hoạt, các điều kiện ràng buộc sẽ được đánh giá trước khi trình kích hoạt được thực thi.

Đối với báo cáo trên bảng và các cột của bảng, hãy sử dụng sp_help hoặc sp_helpconstraint . Để đổi tên bảng, hãy sử dụng sp_rename . Để có báo cáo về các chế độ xem và quy trình được lưu trữ phụ thuộc vào một bảng, hãy sử dụng sys.dm_sql_referenced_entities sys.dm_sql_referencing_entities .

Quy tắc về khả năng vô hiệu trong định nghĩa bảng

Khả năng vô hiệu của một cột xác định liệu cột đó có thể cho phép giá trị null ( NULL ) làm dữ liệu trong cột đó hay không. NULL không phải bằng 0 hoặc trống: NULL có nghĩa là không có mục nhập nào được thực hiện hoặc NULL rõ ràng đã được cung cấp và nó thường ngụ ý rằng giá trị là không xác định hoặc không áp dụng.

Khi bạn sử dụng CREATE TABLE hoặc ALTER TABLE để tạo hoặc thay đổi bảng, cơ sở dữ liệu và cài đặt phiên sẽ ảnh hưởng và có thể ghi đè tính vô hiệu của loại dữ liệu được sử dụng trong một định nghĩa cột. Chúng tôi khuyên bạn nê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 hoặc, nếu bạn sử dụng kiểu dữ liệu do người dùng xác định, bạn cho phép cột sử dụng khả năng vô hiệu mặc định của kiểu dữ liệu. Các cột thưa thớt phải luôn cho phép NULL.

Khi khả năng vô hiệu của cột không được chỉ định rõ ràng, tính vô hiệu của cột tuân theo các quy tắc được hiển thị trong bảng sau.

Kiểu dữ liệu cột
Qui định

Kiểu dữ liệu bí danh
Công cụ cơ sở dữ liệu sử dụng khả năng vô hiệu được chỉ định khi kiểu dữ liệu được tạo. Để xác định khả năng vô hiệu mặc định của kiểu dữ liệu, hãy sử dụng sp_help .

CLR loại do người dùng xác định
Tính vô hiệu được xác định theo định nghĩa cột.

Kiểu dữ liệu do hệ thống cung cấp
Nếu kiểu dữ liệu do hệ thống cung cấp chỉ có một tùy chọn thì nó sẽ được ưu tiên hơn. Loại dữ liệu dấu thời gian phải KHÔNG ĐẦY ĐỦ. Khi bất kỳ cài đặt phiên nào được đặt BẬT bằng cách sử dụng SET:
ANSI_NULL_DFLT_ON = ON, NULL được chỉ định.
ANSI_NULL_DFLT_OFF = ON, NOT NULL được chỉ định.

Khi bất kỳ cài đặt cơ sở dữ liệu nào được định cấu hình bằng ALTER DATABASE:
ANSI_NULL_DEFAULT_ON > = ON, NULL được gán.
ANSI_NULL_DEFAULT_OFF = ON, NOT NULL được gán.

Để xem cài đặt cơ sở dữ liệu cho ANSI_NULL_DEFAULT, hãy sử dụng chế độ xem danh mục sys.databases

Khi cả hai tùy chọn ANSI_NULL_DFLT đều không được đặt cho phiên và cơ sở dữ liệu được đặt thành mặc định (ANSI_NULL_DEFAULT là TẮT), thì mặc định là NOT NULL được chỉ định.

Nếu cột là một cột được tính toán, thì khả năng vô hiệu của nó luôn được Cơ sở dữ liệu xác định tự động. Để tìm hiểu khả năng vô hiệu của loại cột này, hãy sử dụng hàm COLUMNPROPERTY với thuộc tính AllowsNull .

Lưu ý

Cả hai trình điều khiển SQL Server ODBC và SQL Server OLE DB đều mặc định đặt ANSI_NULL_DFLT_ON thành BẬT. Người dùng ODBC và OLE DB có thể định cấu hình điều này trong nguồn dữ liệu ODBC hoặc với các thuộc tính kết nối hoặc thuộc tính do ứng dụng đặt.

Nén dữ liệu

Không thể bật bảng hệ thống để nén. Khi bạn đang tạo bảng, tính năng nén dữ liệu được đặt thành NONE, trừ khi được chỉ định khác. Nếu bạn chỉ định danh sách phân vùng hoặc phân vùng nằm ngoài phạm vi, lỗi sẽ được tạo ra. Để 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ữ sp_estimate_data_compression_savings .

Quyền

Yêu cầu quyền CREATE TABLE trong cơ sở dữ liệu và quyền ALTER trên lược đồ mà bảng đang được tạo.

Nếu bất kỳ cột nào trong câu lệnh CREATE TABLE được xác định thuộc loại do người dùng xác định, thì cần có quyền REFERENCES đối với loại do người dùng xác định.

Nếu bất kỳ cột nào trong câu lệnh CREATE TABLE được xác định là thuộc loại CLR do người dùng xác định, thì quyền sở hữu của loại đó hoặc quyền REFERENCES đối với nó là bắt buộc.

Nếu bất kỳ cột nào trong câu lệnh CREATE TABLE có tập hợp lược đồ XML được liên kết với chúng, thì quyền sở hữu tập hợp lược đồ XML hoặc quyền REFERENCES đối với nó là bắt buộc. < / p>

Bất kỳ người dùng nào cũng có thể tạo bảng tạm thời trong tempdb.

Nếu câu lệnh tạo bảng sổ cái, thì cần có quyền ENABLE LEDGER .

Ví dụ

A. Tạo ràng buộc CHÍNH CHÍNH trên một cột

Ví dụ sau đây cho thấy định nghĩa cột cho ràng buộc CHÍNH CHÍNH với một chỉ mục được phân nhóm trên cột EmployeeID của bảng Employee . Vì tên ràng buộc không được chỉ định, hệ thống sẽ cung cấp tên ràng buộc.

 TẠO BẢNG dbo.Eprisee (
    EmployeeID INT KHÓA CHÍNH ĐÃ ĐIỀU CHỈNH
);
 

B. Sử dụng ràng buộc NGOẠI KHÓA

Ràng buộc NGOẠI KHÓA được sử dụng để tham chiếu một bảng khác. Khóa ngoại có thể là khóa một cột hoặc khóa nhiều cột. Ví dụ sau đây cho thấy ràng buộc NGOẠI KHÓA một cột trên bảng SalesOrderHeader tham chiếu đến bảng SalesPerson . Chỉ mệnh đề TÀI LIỆU THAM KHẢO là bắt buộc đối với ràng buộc NGOẠI KHÓA một cột.

  SalesPersonID VÀ TÀI LIỆU THAM KHẢO ĐẦY ĐỦ Người bán hàng (SalesPersonID)
 

Bạn cũng có thể sử dụng mệnh đề FOREIGN KEY một cách rõ ràng và đặt lại thuộc tính cột. Lưu ý rằng tên cột không nhất thiết phải giống nhau trong cả hai bảng.

  NGOẠI KHÓA (SalesPersonID) TÀI LIỆU THAM KHẢO Người bán hàng (SalesPersonID)
 

Ràng buộc khóa nhiều cột được tạo dưới dạng ràng buộc bảng. Trong cơ sở dữ liệu AdventureWorks2012 , bảng SpecialOfferProduct bao gồm một KHÓA CHÍNH NHIỀU cột. Ví dụ sau đây cho thấy cách tham chiếu khóa này từ một bảng khác; tên ràng buộc rõ ràng là tùy chọn.

  CONSTRAINT FK_SpecialOfferProduct_SalesOrderDetail
    TỪ KHÓA NGOẠI LỆ (ProductID, SpecialOfferID)
    TÀI LIỆU THAM KHẢO SpecialOfferProduct (ProductID, SpecialOfferID)
 

C. Sử dụng các ràng buộc DUY NHẤT

Các ràng buộc UNIQUE được sử dụng để thực thi tính duy nhất trên các cột khóa không phải chính. Ví dụ sau đây thực thi một hạn chế rằng cột Tên của bảng Sản phẩm phải là duy nhất.

  Tên NVARCHAR (100) NOT NULL
DUY NHẤT KHÔNG ĐƯỢC ĐIỀU CHỈNH
 

D. Sử dụng định nghĩa DEFAULT

Giá trị mặc định cung cấp một giá trị (với câu lệnh INSERT và UPDATE) khi không có giá trị nào được cung cấp. Ví dụ: cơ sở dữ liệu AdventureWorks2012 có thể bao gồm một bảng tra cứu liệt kê các công việc khác nhau mà nhân viên có thể điền vào công ty. Dưới cột mô tả từng công việc, mặc định chuỗi ký tự có thể cung cấp mô tả khi mô tả thực tế không được nhập rõ ràng.

  DEFAULT 'Vị trí Mới - chức danh chưa được chính thức hóa'
 

Ngoài các hằng số, định nghĩa DEFAULT có thể bao gồm các hàm. Sử dụng ví dụ sau để lấy ngày hiện tại cho một mục nhập.

  DEFAULT (GETDATE ())
 

Quét chức năng niladic cũng có thể cải thiện tính toàn vẹn của dữ liệu. Để theo dõi người dùng đã chèn một hàng, hãy sử dụng hàm niladic cho USER. Không đặt các hàm niladic bằng dấu ngoặc đơn.

  DEFAULT USER
 

E. Sử dụng ràng buộc KIỂM TRA

Ví dụ sau đây cho thấy một hạn chế được thực hiện đối với các giá trị được nhập vào cột Định mức tín dụng của bảng Nhà cung cấp . Ràng buộc không được đặt tên.

  KIỂM TRA (Định mức tín dụng & gt; = 1 và Định mức tín dụng & lt; = 5)
 

Ví dụ này cho thấy một ràng buộc đã đặt tên với một hạn chế mẫu đối với dữ liệu ký tự được nhập vào một cột của bảng.

  CONSTRAINT CK_emp_id KIỂM TRA (
    emp_id LIKE '[A-Z] [A-Z] [A-Z] [1-9] [0-9] [0-9] [0-9] [0-9] [FM]'
    HOẶC emp_id LIKE '[A-Z] - [A-Z] [1-9] [0-9] [0-9] [0-9] [0-9] [FM]'
)
 

Ví dụ này chỉ định rằng các giá trị phải nằm trong một danh sách cụ thể hoặc tuân theo một mẫu cụ thể.

  KIỂM TRA (
    emp_id IN ('1389', '0736', '0877', '1622', '1756')
    HOẶC emp_id THÍCH '99 [0-9] [0-9] '
)
 

F. Hiển thị định nghĩa bảng đầy đủ

Ví dụ sau hiển thị các định nghĩa bảng hoàn chỉnh với tất cả các định nghĩa ràng buộc cho bảng PurchaseOrderDetail được tạo trong cơ sở dữ liệu AdventureWorks2012 . Lưu ý rằng để chạy mẫu, lược đồ bảng được thay đổi thành dbo .

 TẠO BẢNG dbo.PurchaseOrderDetail
(
    PurchaseOrderID int NOT NULL
        TÀI LIỆU THAM KHẢO Việc mua hàng.
    LineNumber smallint NOT NULL,
    ProductID int NULL
        TÀI LIỆU THAM KHẢO Sản phẩm. Sản phẩm (ProductID),
    Đơn vị Giá tiền NULL,
    OrderQty smallint NULL,
    ReceivedQty float NULL,
    RejectedQty float NULL,
    Ngày đến hạn ngày giờ NULL,
    rowguid uniqueidentifier ROWGUIDCOL NOT NULL
        CONSTRAINT DF_PurchaseOrderDetail_rowguid DEFAULT (NEWID ()),
    Ngày giờ ModifiedDate KHÔNG ĐẦY ĐỦ
        CONSTRAINT DF_PurchaseOrderDetail_ModifiedDate DEFAULT (GETDATE ()),
    LineTotal AS ((UnitPrice * OrderQty)),
    StockedQty AS ((ReceivedQty-RejectedQty)),
    CONSTRAINT PK_PurchaseOrderDetail_PurchaseOrderID_LineNumber
               KHÓA CHÍNH ĐƯỢC ĐIỀU CHỈNH (PurchaseOrderID, LineNumber)
               VỚI (IGNORE_DUP_KEY = TẮT)
)
VỀ CHÍNH QUY;
 

G. Tạo bảng với cột xml được nhập vào bộ sưu tập lược đồ XML

Ví dụ sau tạo một bảng có cột xml được nhập vào bộ sưu tập lược đồ XML HRResumeSchemaCollection . Từ khóa DOCUMENT chỉ định rằng mỗi phiên bản của kiểu dữ liệu xml trong column_name chỉ có thể chứa một phần tử cấp cao nhất.

  TẠO BẢNG HumanResources.EosystemeeResumes
(
    LName nvarchar (25),
    FName nvarchar (25),
    Tiếp tục xml (DOCUMENT HumanResources.HRResumeSchemaCollection)
);
 

H. Tạo bảng được phân vùng

Ví dụ sau tạo một hàm phân vùng để phân vùng bảng hoặc chỉ mục thành bốn phân vùng. Sau đó, ví dụ này tạo một lược đồ phân vùng chỉ định các nhóm tệp để giữ từng phân vùng trong số bốn phân vùng. Cuối cùng, ví dụ tạo một bảng sử dụng lược đồ phân vùng. Ví dụ này giả sử các nhóm tệp đã tồn tại trong cơ sở dữ liệu.

  TẠO CHỨC NĂNG PHẦN myRangePF1 (int)
    NHƯ TRÁI PHẢI CHO CÁC GIÁ TRỊ (1, 100, 1000);
ĐI

TẠO myRangePS1 SCHEME PHẦN
    NHƯ PHẦN PHẦN myRangePF1
    TO (test1fg, test2fg, test3fg, test4fg);
ĐI
  
TẠO BẢNG PartitionTable (col1 int, col2 char (10))
    TRÊN myRangePS1 (col1);
ĐI
 

Dựa trên các giá trị của cột col1 của PartitionTable , các phân vùng được chỉ định theo các cách sau.

Nhóm tệp
test1fg
test2fg
test3fg
test4fg

Phân vùng
1
2
3
4

Giá trị
col 1 & lt; = 1
col1 & gt; 1 VÀ col1 & lt; = 100
col1 & gt; 100 VÀ col1 & lt; = 1.000
col1 & gt; 1000

Tôi. Sử dụng kiểu dữ liệu mã định danh duy nhất trong một cột

Ví dụ sau tạo một bảng với cột uniqueidentifier . Ví dụ sử dụng ràng buộc PRIMARY KEY để bảo vệ bảng khỏi người dùng chèn các giá trị trùng lặp và nó sử dụng hàm NEWSEQUENTIALID () trong ràng buộc DEFAULT để cung cấp giá trị cho các hàng mới. Thuộc tính ROWGUIDCOL được áp dụng cho cột uniqueidentifier để nó có thể được tham chiếu bằng từ khóa $ ROWGUID.

  TẠO BẢNG dbo.Globally_Unique_Data
(
    GUID UNIQUEIDENTIFIER
        CONSTRAINT Guid_Default DEFAULT
        NEWSEQUENTIALID () ROWGUIDCOL,
    Nhân viên_Name VARCHAR (60)
    CONSTRAINT Guid_PK KEY CHÍNH (GUID)
);
 

J. Sử dụng một biểu thức cho một cột được tính toán

Ví dụ sau cho thấy việc sử dụng biểu thức ( (low + high) / 2 ) để tính toán cột được tính myavg .

  TẠO BẢNG dbo.mytable
(
    INT thấp,
    INT cao,
    myavg AS (thấp + cao) / 2
);
 

K. Tạo cột được tính toán dựa trên cột loại do người dùng xác định

Ví dụ sau tạo một bảng với một cột được xác định là kiểu do người dùng xác định utf8string , giả sử rằng tập hợp của kiểu và bản thân kiểu, đã được tạo trong cơ sở dữ liệu hiện tại. Cột thứ hai được xác định dựa trên utf8string và sử dụng phương thức ToString () của type (class) utf8string để tính toán một giá trị cho cột.

  TẠO BẢNG UDTypeTable
(
    u UTF8STRING,
    ustr AS u.ToString () PERSISTED
);
 

L. Sử dụng hàm USER_NAME cho một cột được tính toán

Ví dụ sau sử dụng hàm USER_NAME () trong cột myuser_name .

  TẠO BẢNG dbo.mylogintable
(
    date_in DATETIME,
    user_id INT,
    myuser_name AS USER_NAME ()
);
 

M. Tạo bảng có cột FILESTREAM

Ví dụ sau tạo một bảng có cột FILESTREAM Ảnh . Nếu bảng có một hoặc nhiều cột FILESTREAM thì bảng phải có một cột ROWGUIDCOL .

  TẠO BẢNG dbo.EFasteePhoto
(
    EmployeeId INT NOT NULL PRIMARY KEY,
    Ảnh VARBINARY (MAX) FILESTREAM NULL,
    MyRowGuidColumn UNIQUEIDENTIFIER NOT NULL ROWGUIDCOL UNIQUE DEFAULT NEWID ()
);
 

N. Tạo bảng sử dụng tính năng nén hàng

Ví dụ sau tạo một bảng sử dụng tính năng nén hàng.

  TẠO BẢNG dbo.T1
(
    c1 INT,
    c2 NVARCHAR (200)
)
VỚI (DATA_COMPRESSION = ROW);
 

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

O. Tạo bảng sử dụng tính năng nén XML

Á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.

Ví dụ sau tạo một bảng sử dụng tính năng nén hàng.

  TẠO BẢNG dbo.T1
(
    c1 INT,
    c2 XML
)
WITH (XML_COMPRESSION = ON);
 

P. Tạo bảng có cột thưa thớt và tập hợp cột

Các ví dụ sau đây cho thấy cách tạo bảng có cột thưa và bảng có hai cột thưa và tập hợp cột. Các ví dụ sử dụng cú pháp cơ bản. Để biết các ví dụ phức tạp hơn, hãy xem Sử dụng các cột thưa thớt Sử dụng các tập hợp cột .

Ví dụ này tạo một bảng có một cột thưa thớt.

  TẠO BẢNG dbo.T1
(
    c1 INT PRIMARY KEY,
    c2 VARCHAR (50) SPARSE NULL
);
 

Ví dụ này tạo một bảng có hai cột thưa thớt và một tập hợp cột có tên CSet .

  TẠO BẢNG T1
(
    c1 INT PRIMARY KEY,
    c2 VARCHAR (50) SPARSE NULL,
    c3 INT SPARSE NULL,
    CSet XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
);
 

Hỏi. Tạo bảng tạm thời dựa trên đĩa được phiên bản hệ thống

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2016 (13.x)) và Cơ sở dữ liệu Azure SQL.

Các ví dụ sau đây cho thấy cách tạo bảng tạm thời được liên kết với bảng lịch sử mới và cách tạo bảng tạm thời được liên kết với bảng lịch sử hiện có. Lưu ý rằng bảng tạm thời phải có một khóa chính được xác định để kích hoạt bảng để có thể kích hoạt lập phiên bản hệ thống. Để biết các ví dụ về cách thêm hoặc xóa lập phiên bản hệ thống trên bảng hiện có, hãy xem Lập phiên bản hệ thống trong Ví dụ . Để biết các trường hợp sử dụng, hãy xem Bảng tạm thời .

Ví dụ này tạo một bảng thời gian mới được liên kết với một bảng lịch sử mới.

  TẠO BẢNG
(
    CHAR số phòng ban (10) KHÔNG ĐƯỢC ĐIỀU CHỈNH KHÔNG ĐẦY ĐỦ CHÌA KHÓA CHÍNH,
    DepartmentName VARCHAR (50) KHÔNG ĐẦY ĐỦ,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    Có hiệu lựcTừ DATETIME2 ĐƯỢC TẠO LUÔN KHI ROW BẮT ĐẦU CHƯA ĐỦ,
    ValidTo DATETIME2 ĐƯỢC TẠO LUÔN NHƯ ROW KẾT THÚC CHƯA ĐỦ,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
VỚI (SYSTEM_VERSIONING = ON);
 

Ví dụ này tạo một bảng thời gian mới được liên kết với một bảng lịch sử hiện có.

  - Bảng hiện có
CREATE TABLE Department_History
(
    CHAR số phòng ban (10) KHÔNG ĐẦY ĐỦ,
    DepartmentName VARCHAR (50) KHÔNG ĐẦY ĐỦ,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    Có hiệu lực từ DATETIME2 KHÔNG ĐỦ,
    ValidTo DATETIME2 NOT NULL
);

- Bảng thời gian
BỘ PHẬN TẠO BẢNG
(
    CHAR số phòng ban (10) KHÔNG ĐƯỢC ĐIỀU CHỈNH KHÔNG ĐẦY ĐỦ CHÌA KHÓA CHÍNH,
    DepartmentName VARCHAR (50) KHÔNG ĐẦY ĐỦ,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    Có hiệu lựcTừ DATETIME2 ĐƯỢC TẠO LUÔN KHI ROW BẮT ĐẦU CHƯA ĐỦ,
    ValidTo DATETIME2 ĐƯỢC TẠO LUÔN NHƯ ROW KẾT THÚC CHƯA ĐỦ,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON));
 

R. Tạo bảng tạm thời tối ưu hóa bộ nhớ được phiên bản hệ thống

Áp dụng cho : SQL Server (Bắt đầu với SQL Server 2016 (13.x)) và Cơ sở dữ liệu Azure SQL.

Ví dụ sau đây cho thấy cách tạo một bảng tạm thời được tối ưu hóa cho bộ nhớ có phiên bản hệ thống được liên kết với một bảng lịch sử dựa trên đĩa mới.

Ví dụ này tạo một bảng thời gian mới được liên kết với một bảng lịch sử mới.

 TẠO Lịch sử SCHEMA;
ĐI

TẠO BẢNG dbo.Department
(
    CHAR số phòng ban (10) KHÔNG ĐẦY ĐỦ KHÓA CHÍNH KHÔNG ĐƯỢC ĐIỀU CHỈNH,
    DepartmentName VARCHAR (50) KHÔNG ĐẦY ĐỦ,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    Có hiệu lựcTừ DATETIME2 ĐƯỢC TẠO LUÔN KHI ROW BẮT ĐẦU CHƯA ĐỦ,
    ValidTo DATETIME2 ĐƯỢC TẠO LUÔN NHƯ ROW KẾT THÚC CHƯA ĐỦ,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
VỚI
(
    MEMORY_OPTIMIZED = BẬT,
    DURABILITY = SCHEMA_AND_DATA,
    SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.DepartmentHistory)
);
 

Ví dụ này tạo một bảng thời gian mới được liên kết với một bảng lịch sử hiện có.

  - Bảng hiện có
CREATE TABLE Department_History
(
    CHAR số phòng ban (10) KHÔNG ĐẦY ĐỦ,
    DepartmentName VARCHAR (50) KHÔNG ĐẦY ĐỦ,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    Có hiệu lực từ DATETIME2 KHÔNG ĐỦ,
    ValidTo DATETIME2 NOT NULL
);

- Bảng thời gian
BỘ PHẬN TẠO BẢNG
(
    CHAR số phòng ban (10) KHÔNG ĐƯỢC ĐIỀU CHỈNH KHÔNG ĐẦY ĐỦ CHÌA KHÓA CHÍNH,
    DepartmentName VARCHAR (50) KHÔNG ĐẦY ĐỦ,
    ManagerID INT NULL,
    ParentDepartmentNumber CHAR (10) NULL,
    Có hiệu lựcTừ DATETIME2 ĐƯỢC TẠO LUÔN KHI ROW BẮT ĐẦU CHƯA ĐỦ,
    ValidTo DATETIME2 ĐƯỢC TẠO LUÔN NHƯ ROW KẾT THÚC CHƯA ĐỦ,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
VỚI
(
    SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Department_History, DATA_CONSISTENCY_CHECK = ON)
);
 

S. Tạo bảng với các cột được mã hóa

Ví dụ sau tạo một bảng có hai cột được mã hóa. Để biết thêm thông tin, hãy xem Luôn được mã hóa .

  TẠO BẢNG Khách hàng (
    CustName NVARCHAR (60)
        ĐƯỢC THỰC HIỆN VỚI (
            COLUMN_ENCRYPTION_KEY = MyCEK,
            ENCRYPTION_TYPE = RANDOMIZED,
            ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
        ),
    SSN VARCHAR (11) COLLATE Latin1_General_BIN2
        ĐƯỢC THỰC HIỆN VỚI (
            COLUMN_ENCRYPTION_KEY = MyCEK,
            ENCRYPTION_TYPE = DETERMINISTIC,
            ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
        ),
    Tuổi INT NULL
);
 

T. Tạo chỉ mục được lọc nội tuyến

Tạo một bảng có chỉ mục được lọc nội dòng.

  TẠO BẢNG t1
(
    c1 INT,
    chỉ mục IX1 (c1) WHERE c1 & gt; 0
);
 

U. Tạo chỉ mục nội tuyến

Phần sau trình bày cách sử dụng nội tuyến NONCLUSTERED cho các bảng dựa trên đĩa:

  TẠO BẢNG t1
(
    c1 INT,
    INDEX ix_1 KHÔNG ĐƯỢC ĐIỀU CHỈNH (c1)
);

TẠO BẢNG t2
(
    c1 INT,
    c2 INT INDEX ix_1 KHÔNG ĐƯỢC ĐIỀU CHỈNH
);

TẠO BẢNG t3
(
    c1 INT,
    c2 INT,
    INDEX ix_1 KHÔNG ĐƯỢC ĐIỀU CHỈNH (c1, c2)
);
 

V. Tạo bảng tạm thời với khóa chính phức hợp được đặt tên ẩn danh

Tạo một bảng với khóa chính phức hợp được đặt tên ẩn danh. Điều này hữu ích để tránh xung đột thời gian chạy trong đó hai bảng tạm thời trong phạm vi phiên, mỗi bảng trong một phiên riêng biệt, sử dụng cùng một tên cho một ràng buộc.

  TẠO BẢNG #tmp
(
    c1 INT,
    c2 INT,
    KHÓA CHÍNH ĐÃ ĐIỀU CHỈNH ([c1], [c2])
);
ĐI
 

Nếu bạn đặt tên rõ ràng cho ràng buộc, phiên thứ hai sẽ tạo ra lỗi như:

  Msg 2714, Level 16, State 5, Line 1
Đã có một đối tượng có tên 'PK_ # tmp' trong cơ sở dữ liệu.
Bản tin thứ 1750, Mức 16, Trạng thái 1, Dòng 1
Không thể tạo ràng buộc hoặc chỉ mục. Xem các lỗi trước đó.
 

Vấn đề nảy sinh từ thực tế là trong khi tên bảng tạm thời là duy nhất, các tên ràng buộc thì không.

W. Sử dụng các bảng tạm thời toàn cục trong Cơ sở dữ liệu Azure SQL

Phiên A tạo bảng tạm thời toàn cục ## test trong Azure SQL Database testdb1 và thêm 1 hàng

  TẠO BẢNG ## test (
    một INT,
    b INT
);

CHÈN VÀO ## kiểm tra
GIÁ TRỊ (1, 1);

- Lấy ID đối tượng cho kiểm tra bảng tạm thời ##
SELECT OBJECT_ID ('tempdb.dbo. ## test') AS 'ID đối tượng';
 

Đây là tập hợp kết quả.

  1253579504
 

Lấy tên bảng tạm thời chung cho một đối tượng nhất định ID 1253579504 trong tempdb (2)

  CHỌN tên TỪ tempdb.sys.objects WHERE object_id = 1253579504;
 

Đây là tập hợp kết quả.

  ## kiểm tra
 

Phiên B kết nối với Cơ sở dữ liệu Azure SQL testdb1 và có thể truy cập bảng ## test được tạo bởi phiên A

  SELECT * FROM ## test;
 

Đây là tập hợp kết quả.

  1, 1
 

Phiên C kết nối với cơ sở dữ liệu khác trong Cơ sở dữ liệu Azure SQL testdb2 và muốn truy cập ## test được tạo trong testdb1. Lựa chọn này không thành công do phạm vi cơ sở dữ liệu cho các bảng tạm thời chung

  SELECT * FROM ## test
 

Điều nào tạo ra lỗi sau:

  Msg 208, Level 16, State 0, Line 1
Tên đối tượng '## test' không hợp lệ
 

Định địa chỉ đối tượng hệ thống trong Cơ sở dữ liệu Azure SQL tempdb từ cơ sở dữ liệu người dùng hiện tại testdb1

  CHỌN * TỪ tempdb.sys.objects;
CHỌN * TỪ tempdb.sys.columns;
CHỌN * TỪ tempdb.sys.database_files;
 

X. Bật Chính sách lưu giữ dữ liệu trên bảng

Ví dụ sau tạo một bảng có bật tính năng lưu giữ dữ liệu và khoảng thời gian lưu giữ là 1 tuần. Ví dụ này chỉ áp dụng cho Azure SQL Edge .

  TẠO BẢNG [dbo]. [data_retention_table]
(
  [dbdatetime2] datetime2 (7),
  [product_code] int,
  [giá trị] char (10)
)
VỚI (DATA_DELETION = BẬT (FILTER_COLUMN = [dbdatetime2], RETENTION_PERIOD = 1 TUẦN))
 

Y. Tạo bảng sổ cái có thể cập nhật

Ví dụ sau tạo một bảng sổ cái có thể cập nhật không phải là một bảng tạm thời với một bảng lịch sử ẩn danh (hệ thống sẽ tạo tên của bảng lịch sử) và tên chế độ xem sổ cái đã tạo. Vì tên của các cột luôn được tạo bắt buộc và các cột bổ sung trong chế độ xem sổ cái không được chỉ định, các cột sẽ có tên mặc định.

  TẠO SCHEMA [HR];
ĐI
TẠO BẢNG [Nhân sự]. [Nhân viên]
(
    ID nhân viên KHÔNG ĐẦY ĐỦ,
    Tiền lương KHÔNG ĐẦY ĐỦ
)
VỚI (SYSTEM_VERSIONING = ON, LEDGER = ON);
ĐI
 

Ví dụ sau tạo một bảng vừa là bảng tạm thời vừa là bảng sổ cái có thể cập nhật, với bảng lịch sử ẩn danh (với tên do hệ thống tạo), tên chế độ xem sổ cái đã tạo và tên mặc định của các cột luôn được tạo và các cột xem sổ cái bổ sung.

  TẠO SCHEMA [HR];
ĐI
TẠO BẢNG [Nhân sự]. [Nhân viên]
(
    ID nhân viên KHÔNG KHÔNG ĐẦY ĐỦ TỪ KHÓA CHÍNH,
    Tiền lương KHÔNG ĐỦ,
    Có hiệu lựcTừ DATETIME2 ĐƯỢC TẠO LUÔN KHI ROW BẮT ĐẦU CHƯA ĐỦ,
    ValidTo DATETIME2 ĐƯỢC TẠO LUÔN NHƯ ROW KẾT THÚC CHƯA ĐỦ,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
VỚI (SYSTEM_VERSIONING = ON, LEDGER = ON);
ĐI
 

Ví dụ sau tạo một bảng vừa là bảng tạm thời vừa là bảng sổ cái có thể cập nhật với bảng lịch sử được đặt tên rõ ràng, tên do người dùng chỉ định của chế độ xem sổ cái và tên do người dùng chỉ định của các cột luôn được tạo và các cột bổ sung trong chế độ xem sổ cái.

  TẠO SCHEMA [HR];
ĐI
TẠO BẢNG [Nhân sự]. [Nhân viên]
(
    ID nhân viên KHÔNG KHÔNG ĐẦY ĐỦ TỪ KHÓA CHÍNH,
    Tiền lương KHÔNG ĐẦY ĐỦ,
    StartTransactionId BIGINT ĐƯỢC TẠO LUÔN NHƯ TRANSACTION_ID BẮT ĐẦU CHƯA KHÔNG ĐỦ,
    EndTransactionId BIGINT ĐƯỢC TẠO LUÔN NHƯ TRANSACTION_ID KẾT THÚC HIDDEN NULL,
    StartSequenceNumber BIGINT ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER BẮT ĐẦU CHƯA KHÔNG ĐỦ,
    EndSequenceNumber BIGINT ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER END HIDDEN NULL,
    Có hiệu lựcTừ DATETIME2 ĐƯỢC TẠO LUÔN KHI ROW BẮT ĐẦU CHƯA ĐỦ,
    ValidTo DATETIME2 ĐƯỢC TẠO LUÔN NHƯ ROW KẾT THÚC CHƯA ĐỦ,
    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
VỚI (
    SYSTEM_VERSIONING = ON (HISTORY_TABLE = [HR]. [Nhân viên]),
    LEDGER = BẬT (
        LEDGER_VIEW = [HR]. [Nhân viênLedger] (
            TRANSACTION_ID_COLUMN_NAME = Giao dịchId,
            SEQUENCE_NUMBER_COLUMN_NAME = Số thứ tự,
            OPERATION_TYPE_COLUMN_NAME = OperationId,
            OPERATION_TYPE_DESC_COLUMN_NAME = OperationTypeDescription
        )
    )
);
ĐI
 

Ví dụ sau tạo một bảng sổ cái chỉ phần phụ với các tên đã tạo của chế độ xem sổ cái và các cột trong chế độ xem sổ cái.

  TẠO SCHEMA [AccessControl];
ĐI
TẠO BẢNG [AccessControl]. [KeyCardEvents]
(
    ID nhân viên KHÔNG ĐẦY ĐỦ,
    AccessOperationDescription NVARCHAR (MAX) KHÔNG ĐỦ,
    [Dấu thời gian] Datetime2 NOT NULL,
    StartTransactionId BIGINT ĐƯỢC TẠO LUÔN NHƯ TRANSACTION_ID BẮT ĐẦU CHƯA KHÔNG ĐỦ,
    StartSequenceNumber BIGINT ĐƯỢC TẠO LUÔN NHƯ SEQUENCE_NUMBER BẮT ĐẦU KHÔNG ĐỦ
)
VỚI (
    LEDGER = BẬT (
        LEDGER_VIEW = [AccessControl]. [KeyCardEventsLedger] (
            TRANSACTION_ID_COLUMN_NAME = Giao dịchId,
            SEQUENCE_NUMBER_COLUMN_NAME = Số thứ tự,
            OPERATION_TYPE_COLUMN_NAME = OperationId,
            OPERATION_TYPE_DESC_COLUMN_NAME = OperationTypeDescription
        ),
        APPEND_ONLY = BẬT
    )
);
ĐI
 

Ví dụ sau tạo cơ sở dữ liệu sổ cái trong Cơ sở dữ liệu Azure SQL và một bảng sổ cái có thể cập nhật bằng cách sử dụng cài đặt mặc định. Tạo bảng sổ cái có thể cập nhật trong cơ sở dữ liệu sổ cái không yêu cầu sử dụng WITH (SYSTEM_VERSIONING = ON, LEDGER = ON); .

  TẠO CƠ SỞ DỮ LIỆU MyLedgerDB (EDITION = 'GeneralPurpose') VỚI LEDGER = ON;
ĐI

TẠO SCHEMA [Nhân sự];
ĐI

TẠO BẢNG [Nhân sự]. [Nhân viên]
(
    ID nhân viên KHÔNG ĐẦY ĐỦ,
    Tiền lương KHÔNG ĐẦY ĐỦ
)
ĐI
 

Các bước tiếp theo


Xem thêm những thông tin liên quan đến chủ đề tạo bảng dưới dạng máy chủ sql

CUME_DIST analytic function in SQL Server

  • Tác giả: EVERYDAY BE CODING
  • Ngày đăng: 2020-06-20
  • Đánh giá: 4 ⭐ ( 5344 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Playlist - https://www.youtube.com/watch?v=Nhcgs0bNshE&list=PLdnPqkBptCEITvVQtcOmKUgA7xT6Fqixc
    ------------------------------------------------------------------------------------------
    CUME_DIST() - https://youtu.be/Nhcgs0bNshE
    PERCENT_RANK() - https://youtu.be/Kd6coeQN8Y4
    FIRST_VALUE() - https://youtu.be/nCl01TIseZs
    LAST_VALUE() - https://youtu.be/NnMH-TU-BU4
    LEAD() - https://youtu.be/_DlXcVW_axA
    LAG() - https://youtu.be/1yt2f4k5DAM
    PERCENTILE_CONT() - https://youtu.be/0VwRl5geLOs
    PERCENTILE_DISC() - https://youtu.be/KJborDiUvNk
    ------------------------------------------------------------------------------------------

    QUERY SOLVE -
    1. Analytic functions in SQL Server
    2. CUME_DIST analytic functions in SQL Server
    3. Syntax of CUME_DIST analytic functions
    4. partition by clause in SQL Server
    5. Order by clause in SQL Server
    6. Default parameters of CUME_DIST analytic functions in SQL Server

    CUME_DIST ()
    As per SQL Server Official Documentation, the CUME_DIST function is used to find the cumulative distribution of value among the group of values. Simply speaking, the cumulative distribution value for a row can be calculated by dividing the row number (as defined by the ORDER BY clause) by the total number of rows in the group.
    The range of values returned by CUME_DIST is greater than 0.0 and less than or equal to 1.0

    Syntax :
    CUME_DIST( ) OVER ( [ partition_by_clause ] order_by_clause )

    Formula :
    CUME_DIST( ) = (RowNo / TotalRows)

    QUERY :

    CREATE TABLE SCRIPT -
    ----------------------------------------
    CREATE TABLE [dbo].[Bikes](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](100) NULL,
    [Make] [varchar](100) NULL,
    [Model] [int] NULL,
    [Price] [int] NULL,
    [Type] [varchar](20) NULL,
    PRIMARY KEY CLUSTERED
    (
    [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]
    GO

    -----CUME_DIST() - ANALYTIC FUNCTION QUERY
    -----------------------------------------------------------------------------
    SELECT [Name],
    Make,
    Model,
    Price,
    [Type],
    CUME_DIST () over (PARTITION BY [TYPE] ORDER BY price) as CUME_DIST
    FROM [Bikes]

    Thanks for watching this video

Tạo web service với PHP và MySQL

  • Tác giả: itzone.com.vn
  • Đánh giá: 4 ⭐ ( 9093 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: The ITZone platform Vietnam is the community for anyone interested in news, training seminars, presentations etc in the IT industry

Cách để Tạo cơ sở dữ liệu máy chủ SQL

  • Tác giả: www.wikihow.vn
  • Đánh giá: 3 ⭐ ( 3750 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Cách để Tạo cơ sở dữ liệu máy chủ SQL. Cơ sở dữ liệu máy chủ SQL là một trong những cơ sở dữ liệu phổ biến nhất hiện nay, một phần là bởi cơ sở dữ liệu này rất dễ khởi tạo và duy trì. Với chương trình giao diện đồ họa người dùng (GUI) như...

Bảng SQL Server: CREATE, ALTER, DROP [Ví dụ T-SQL]

  • Tác giả: vi.on2vhf.be
  • Đánh giá: 5 ⭐ ( 7163 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bảng là gì? Bảng là một đối tượng lưu trữ dữ liệu ở định dạng Hàng & Cột. Bên dưới Sơ đồ, hiển thị các Hàng và Cột tương ứng. Trong hướng dẫn này, bạn sẽ học: Bảng là gì? Làm thế nào để tạo ra

Khởi tạo Database trong SQL Server

  • Tác giả: howkteam.vn
  • Đánh giá: 5 ⭐ ( 4319 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Khởi tạo Database trong SQL Server

Hướng dẫn tạo bảng trong SQL Server

  • Tác giả: giasutinhoc.vn
  • Đánh giá: 5 ⭐ ( 9073 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

[MySQL 06] MySQL Tạo cơ sở dữ liệu, bảng, kiểu dữ liệu

  • Tác giả: www.codelean.vn
  • Đánh giá: 3 ⭐ ( 3834 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: CodeLean.vn là nơi chia sẻ kiến thức của những người học, làm và dạy trong lĩnh vực công nghệ thông tin.

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