Thứ Hai, 23 tháng 7, 2012

Lấy danh sách tất cả các table, các column trong table và kiểu dữ liệu của column trong database Sql Server

Bài này mình sẽ hướng dẫn cách lấy danh sách tất cả các table, các column trong table và kiểu dữ liệu của column trong database Sql Server:

Lấy danh sách các table:
  1. select object_id,name from sys.objects where type='u'  
  2. -- hoặc  
  3. select object_id,name from sys.tables  
  4.       
Dựa vào object_id của mỗi table ta lấy ra được danh sách các column trong table đó:
  1. select * from sys.all_columns where object_id = [object_id của table]  
  2.       
Sau khi chạy câu truy vấn trên, để ý cột user_type_id nó chính là id của kiểu dữ liệu trong SQL. Truy vấn sys.types để lấy tên kiểu dữ liệu. Ví dụ kiểu bigint:
  1. select * from sys.types where user_type_id = 127  
  2.       
Lúc này ta đã lấy được kiểu dữ liệu của từng column trong table rồi đó.

Demo nào:
Trong database của mình có 1 table tên tblBug. Sau khi truy vấn mình lấy được object_id của nó là 248325189:
  1. select object_id,name from sys.objects where type='u' and name ='tblBug'  
  2.       
Lấy danh sách các column và kiểu dữ liệu:
  1. select cl.name as 'Tên column', tp.name as 'Kiểu dữ liệu',cl.max_length from sys.all_columns cl join sys.types tp on cl.user_type_id = tp.user_type_id where object_id = 248325189  
  2.       
Kết quả:
Lúc này có thể lấy các thông tin trên để generate source code tự động cho việc lập trình rùi.

2 nhận xét :

  1. Bạn có chương trình nào cụ thể liệt kê được các Table trong 1 CSDL ACCESS không ? Tôi làm thử với câu truy vân như bạn gợi ý nhưng không được
    select object_id,name from sys.tables

    Trả lờiXóa
  2. Chào bạn, cảm ơn bạn về bài viết rất hay. mình hỏi thêm chút là mình muốn biết bảng đó trường nào là khóa chính, và khóa ngoại thì làm như thế nào bạn.
    Thank!

    Trả lờiXóa