2013-09-04 36 views
7

Tôi có một cột gọi là MealType (VARCHAR) trong bảng của tôi với một hạn chế CHECK cho {"Veg", "NonVeg", "Vegan"}Làm thế nào để hạn chế trên một cột bảng SQL

Đó sẽ chăm sóc chèn.

Tôi muốn hiển thị các tùy chọn này để chọn, nhưng tôi không thể tìm ra truy vấn SQL để tìm ra các ràng buộc của một cột cụ thể trong bảng.

Từ cái nhìn đầu tiên tại các bảng hệ thống trong máy chủ MS SQL, có vẻ như tôi sẽ cần sử dụng API của MS SQL để nhận thông tin. Tôi đã hy vọng cho một truy vấn SQL chính nó để có được nó.

+4

Giữ các ràng buộc trong Bảng MealType, theo cách này nếu có nhiều tùy chọn hơn là chỉ Veg, Notveg, bạn có thể dễ dàng mở rộng. – Elias

+0

Bạn đang sử dụng cơ sở dữ liệu nào? Các ràng buộc có lẽ trong danh mục nếu bạn yêu cầu điều này. – dcaswell

+1

Bạn đang sử dụng DBMS nào? –

Trả lời

9

Truy vấn này sẽ hiển thị cho bạn tất cả những hạn chế trên một bảng:

select chk.definition 
from sys.check_constraints chk 
inner join sys.columns col 
    on chk.parent_object_id = col.object_id 
inner join sys.tables st 
    on chk.parent_object_id = st.object_id 
where 
st.name = 'Tablename' 
and col.column_id = chk.parent_column_id 

có thể thay thế các câu lệnh select với điều này:

select substring(chk.Definition,2,3),substring(chk.Definition,9,6),substring(chk.Definition,20,5) 
+0

Tha thứ sự thiếu hiểu biết của tôi, nhưng chk là gì? – Raja

+0

Chk là bí danh tôi đang sử dụng cho sys.check_constraints, bạn có cần các ràng buộc tách biệt không? – orgtigger

+0

Vâng. Cảm ơn bạn đã giúp đỡ - tôi chưa bao giờ sử dụng SQL trước đây. – Raja

12

Cách dễ nhất và nhanh nhất là sử dụng:

sp_help 'TableName' 
+0

Đây là một giải pháp khủng khiếp để nhận thông tin theo chương trình. –

+0

Đó là ok, tác giả không muốn để có được chúng lập trình; họ chỉ muốn có một danh sách về những ràng buộc. Nếu bạn đang chỉnh sửa một DB hoặc sửa chữa một vấn đề, sp_help là dễ nhất. – DaBlue