2012-12-10 17 views
14

Tôi biết rằng các loại do người dùng xác định được lưu trữ trong information_schema.domains, nhưng có thể lấy định nghĩa cho các loại thuộc loại table type không?Có thể nhận các định nghĩa kiểu bảng từ INFORMATION_SCHEMA không?

Để rõ ràng, tôi đang tìm định nghĩa loại bảng thực tế:

ví dụ: Tôi muốn nhận các định nghĩa cột cho myTableType

CREATE TYPE myTableType AS TABLE(
    Id INT, 
    SomeValue NVARCHAR(20) 
); 
+0

gì phiên bản của SQL Server? Có lý do nào mà bạn không thể sử dụng DMV mới không? – Yuck

+0

Bạn đang tìm kiếm tương đương với 'INFORMATION_SCHEMA.COLUMNS' cho định nghĩa kiểu bảng do người dùng định nghĩa, đúng không? – billinkc

+0

@ billinkc Đúng vậy. – Romoku

Trả lời

22

Để lấy danh sách cột cho loại bảng do người dùng xác định, hãy chạy cột này. Bạn sẽ cần phải thay thế tên bảng của bạn cho some_table_type:

SELECT * 
FROM sys.columns 
WHERE object_id IN (
    SELECT type_table_object_id 
    FROM sys.table_types 
    WHERE name = 'some_table_type' 
); 
+0

Tôi đang tìm định nghĩa thực tế cho loại. Tôi sẽ chỉnh sửa bài đăng của mình để làm rõ điều này. – Romoku

+0

@Romoku Xem bản chỉnh sửa của tôi. Tôi nghĩ rằng bạn đang tìm kiếm điều đó sau khi làm rõ. – Yuck

+0

Vâng đó là những gì tôi muốn, cảm ơn! – Romoku

7

Lấy danh sách các loại bảng, cột và kiểu dữ liệu cho một loại bảng người dùng định nghĩa.

select tt.name AS table_Type, c.name AS table_Type_col_name,st.name AS 
table_Type_col_datatype 
from sys.table_types tt 
inner join sys.columns c on c.object_id = tt.type_table_object_id 
INNER JOIN sys.systypes AS ST ON ST.xtype = c.system_type_id 
3
select tt.name AS table_Type, c.name AS Column_Name,st.name AS Datatype, 
CASE WHEN st.name='numeric' THEN '(' + Convert(varchar(5),C.precision) + ',' + Convert(varchar(5),C.scale) + ')' 
WHEN st.name='varchar' OR st.name='nvarchar' THEN '(' + Convert(varchar(5),c.max_length) + ')' 
ELSE '' END AS Size 
,CASE WHEN C.is_nullable =0 THEN 'NOT NULL,' ELSE ',' END AS Nullable 
from sys.table_types tt 
inner join sys.columns c on c.object_id = tt.type_table_object_id 
INNER JOIN sys.systypes AS ST ON (ST.xusertype = c.system_type_id AND ST.uid=4) 
ORDER BY tt.name, c.column_id 
+0

Truy vấn sử dụng đầy đủ, cảm ơn bạn –

2

Sử dụng Management Studio nó cũng có thể truy cập vào một đại diện trực quan của các tùy chỉnh/loại bảng người dùng định nghĩa, cũng giống như bạn có thể với các bảng thông thường.

Sự khác biệt là bảng người dùng định nghĩa xuất hiện dưới lập trình nút trong thám hiểm đối tượng, như hình dưới đây, thay vì dưới Bàn:

Custom user-defined table type

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