Ghi chú các câu lệnh truy vấn SQL Server

Cấu hình Quoted Identifiers

Kiểm tra trạng thái quoted_identifier của phiên làm việc hiện tại:

SELECT quoted_identifier
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID

Thiết lập trạng thái quoted_identifier cho phiên hiện tại:

SET QUOTED_IDENTIFIER ON/OFF

Xác định vị trí vật lý của trang dữ liệu

Phương pháp 1: Sử dụng view hệ thống sys.system_internals_allocation_units:

SELECT a.first_page
FROM sys.partitions p 
JOIN sys.system_internals_allocation_units a 
ON p.partition_id = a.container_id
WHERE p.object_id = OBJECT_ID('your_table')

Kết quả dạng 0x160200000100 sẽ được chuyển đổi thành:

  • File ID: 0x0001 (giá trị thập phân: 1)
  • Page ID: 0x00000216 (giá trị thập phân: 534)

Phương pháp 2: Sử dụng lệnh DBCC IND:

DBCC IND(database_name, table_name, -1)

Phương pháp 3: Hàm định dạng vị trí vật lý:

SELECT sys.fn_PhysLocFormatter(%%physloc%%) AS PhysicalLocation, * FROM your_table

Xem nội dung trang dữ liệu

Sử dụng lệnh DBCC PAGE:

DBCC TRACEON(3604)
DBCC PAGE(test, 1, 534, 3)

Tham số: (tên CSDL, file_id, page_id, tùy chọn hiển thị)

Cách lưu trữ giá trị NULL trong cột VARCHAR

Tạo bảng thử nghiệm:

CREATE TABLE dbo.cot_null
(
    id INT PRIMARY KEY IDENTITY,
    cot1 VARCHAR(10) NULL,
    cot2 VARCHAR(10) NULL
)

Phân tích cho thấy:

  • NULL và chuỗi rỗng được lưu trữ tương tự nhau
  • Cột NULL ở cuối không được tính vào độ dài dữ liệu
  • Cột có độ dài cố định (CHAR) lưu giá trị 0 cho NULL

Định dạng ngày/giờ

So sánh các kiểu dữ liệu:

Kiểu dữ liệuGiá trị mẫuPhạm vi lưu trữ
DATETIME1900-01-01 đến 9999-12-318 byte
DATETIME20001-01-01 đến 9999-12-316-8 byte

Ví dụ chuyển đổi:

SELECT CAST(dt1 AS VARBINARY(8)) AS bin_dt1,
       CAST(dt2 AS VARBINARY(10)) AS bin_dt2
FROM times

Công thức tính toán giá trị thời gian:

  • DATETIME: Số tick (1 tick = 3.33ms)
  • DATETIME2: ((H*60+M)*60+S)*10^D + F

Thẻ: SQL Server T-SQL DBCC PAGE sys.dm_exec_sessions datetime2

Đăng vào ngày 20 tháng 5 lúc 06:03