2012-06-29 27 views
23

Tôi đang cố gắng chọn các tên cột của view theo cách tương tự như chọn từ information_schema.columns.Chọn các cột của Chế độ xem

Tôi dường như không thể tìm cách để thực hiện việc này. Có ai khác đã làm điều này trước hoặc biết nếu nó thậm chí có thể?

Trả lời

44

information_schema.columns.Table_name (ít nhất là dưới Sql Server 2000) bao gồm quan điểm, vì vậy chỉ cần sử dụng

SELECT * FROM information_schema.columns WHERE table_name = 'VIEW_NAME' 
xem
+4

không trả lại gì trong SSMS 2012 – Imad

+0

Làm việc với tôi. Cảm ơn! –

10

Hãy thử điều này:

SELECT * 
FROM sys.views 

này cung cấp cho bạn các quan điểm như vậy - nếu bạn cần các cột, sử dụng này:

SELECT * 
FROM sys.columns 
WHERE object_id = OBJECT_ID('dbo.YourViewNameHere') 

Không chắc làm thế nào bạn có thể làm điều đó bằng cách sử dụng INFORMATION_SCHEMA - Tôi không bao giờ sử dụng điều đó, vì nó cảm thấy khá "khó chịu" và không trực quan, so với chế độ xem danh mục lược đồ sys.

Xem MSDN docs on the Catalog Views để biết tất cả chi tiết của tất cả các chế độ xem có sẵn và thông tin nào có thể chứa.

+0

Tên này cung cấp cho tôi tên của tất cả các chế độ xem chứ không phải tên của các cột trong chế độ xem. – steventnorris

0
SELECT distinct VIEW_NAME 
    ,TABLE_SCHEMA 
    ,TABLE_NAME 
    ,COLUMN_NAME 
FROM INFORMATION_SCHEMA.VIEW_COLUMN_USAGE 
--WHERE TABLE_SCHEMA = 'Person' 
ORDER BY 
    VIEW_NAME 
    ,TABLE_SCHEMA 
    ,TABLE_NAME 
    ,COLUMN_NAME 
+0

Đây là một truy vấn rất thú vị nhưng nó thực sự trả về các cột trong bảng được sử dụng để nhận kết quả trong truy vấn, chứ không phải các cột xem được trả lại. Do đó nó không chính xác cho câu trả lời nhưng rất hữu ích không kém. – AnthonyVO

1

INFORMATION_SCHEMA giữ siêu dữ liệu về các đối tượng trong cơ sở dữ liệu. INFORMATION_SCHEMA.COLUMNS sử dụng các bảng sys bên dưới để truy xuất siêu dữ liệu (kiểm tra sp_helptext 'master.Information_schema.columns'). Bạn có thể sử dụng truy vấn đơn giản này để chọn tên cột được sử dụng trong bất kỳ chế độ xem nào.

SELECT col.name 
FROM <db_name>.sys.columns col, <db_name>.sys.views vew 
WHERE col.object_id = vew.object_id 
AND vew.name = '<view_name>' 
+0

chào mừng bạn đến ngăn xếp, bất cứ khi nào bạn trả lời một vấn đề luôn cố gắng giải thích cách giải pháp sẽ giúp người hỏi. hãy dành chút thời gian và chỉnh sửa câu trả lời của bạn –

+1

Thay vì nhiều bảng trong mệnh đề 'FROM', bạn có thể sử dụng' JOIN'. Vì vậy, truy vấn sẽ là 'SELECT col.name FROM sys.columns col JOIN sys.views vew ON col.object_id = vew.object_id WHERE vew.name = ''' – Arulkumar

Các vấn đề liên quan