Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Liệt kê tất cả các cột không thể xóa trong cơ sở dữ liệu máy chủ SQL

Các cột vô hiệu trong cơ sở dữ liệu đôi khi có thể dẫn đến các vấn đề về hiệu suất. Điều đó chắc chắn không có nghĩa là các cột có thể vô hiệu sẽ luôn gây ra các vấn đề về hiệu suất, nhưng nếu bạn tình cờ gặp vấn đề về hiệu suất, việc xác định các cột có thể không có khả năng cung cấp một số manh mối về vị trí của vấn đề. Đôi khi tạo một cột NOT NULL có thể giúp cải thiện hiệu suất.

Ý tôi là "cột nullable", các cột cho phép NULL. Nếu định nghĩa của cột không bao gồm NOT NULL , thì nó cho phép các giá trị NULL và nó là "nullable".

Dưới đây là mã cho phép bạn liệt kê tất cả các cột có thể vô hiệu hóa trong cơ sở dữ liệu trong SQL Server.

Ví dụ 1 - INFORMATION_SCHEMA.COLUMNS

Dạng xem lược đồ thông tin này liệt kê tất cả các cột có thể được truy cập bởi người dùng hiện tại trong cơ sở dữ liệu hiện tại. Nó có một cột được gọi là IS_NULLABLE . Nếu cột có liên quan cho phép NULL, cột này trả về . Nếu không, KHÔNG được trả lại.

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE IS_NULLABLE = 'YES';

Điều này liệt kê tất cả các cột từ chế độ xem.

Ví dụ 2 - INFORMATION_SCHEMA.COLUMNS với ít cột được chỉ định hơn

Bạn có thể không muốn tất cả các cột được trả về từ dạng xem. Dưới đây là một ví dụ với ít cột được trả về hơn.

SELECT
    TABLE_SCHEMA,
    TABLE_NAME,
    COLUMN_NAME,
    COLUMN_DEFAULT,
    DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE IS_NULLABLE = 'YES'
ORDER BY TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME;

Ví dụ 3 - Sử dụng sys.columns

Nếu bạn không muốn sử dụng INFORMATION_SCHEMA.COLUMNS xem, sau đó bạn có thể truy vấn sys.columns xem thay thế.

Tuy nhiên, bạn sẽ cần thực hiện một số phép nối nếu bạn muốn trả về các bảng và / hoặc lược đồ, v.v.

Ví dụ:

SELECT 
    SCHEMA_NAME(t.schema_id) AS [Schema],
    t.name AS [Table],
    c.name AS [Column],
    dc.definition AS [Column Default],
    ty.name AS [Data Type]
FROM sys.tables AS t
INNER JOIN sys.columns AS c 
    ON t.object_id = c.object_id
LEFT JOIN sys.types AS ty 
    ON c.user_type_id = ty.user_type_id
LEFT JOIN sys.default_constraints dc  
    ON c.default_object_id = dc.object_id
WHERE c.is_nullable = 1
ORDER BY [Schema], [Table], [Column];

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2016:Luôn được mã hóa

  2. Bạn có thể có logic if-then-else trong SQL không?

  3. Đi với trình điều khiển SQL Server không thể kết nối thành công, đăng nhập không thành công

  4. Cách đơn giản nhất để thực hiện tự tham gia đệ quy?

  5. Mẹo để giảm độ phức tạp của máy chủ SQL của bạn