2012-05-10 4 views
10

Phần thứ ba của bài tập này tôi đang nói, "Tạo và lập chỉ mục chế độ xem Northwind hiện có có tên" dbo.Orders Qry "dựa trên các cột OrderID và EmployeeID. "Không thể tạo chỉ mục trên dạng xem vì chế độ xem không phải là lỗi ràng buộc lược đồ 1939

Dự kiến ​​tôi sẽ gặp lỗi; tuy nhiên, người hướng dẫn của tôi chỉ nói với chúng tôi về Google. Tôi đã làm, nhưng chương trình ràng buộc không phải là ngay cả trong bài học của tuần này hoặc bất kỳ những người khác, và những điều tôi đã tìm thấy là quá sâu để tôi hiểu.

Đây có phải là vấn đề của tôi khi không chọn hộp hoặc thay đổi cài đặt ở đâu đó không?

Trả lời

20

Có vẻ như đây là mô tả chế độ xem được lập chỉ mục, bạn có thể đọc chúng trên trang web của Microsoft here. Microsoft kích hoạt tính năng này bắt đầu với SQL 2005.

Trong văn bản cho định nghĩa khung nhìn, bạn sẽ cần phải thêm các từ WITH SCHEMABINDING ngay sau khi tuyên bố CREATE VIEW, ví dụ:

CREATE VIEW dbo.MyView 
WITH SCHEMABINDING 

AS 

SELECT a, b, c 
FROM dbo.MyTable 

Để thêm chỉ mục, bạn muốn thêm tuyên bố vào định nghĩa chế độ xem tương tự như sau:

-- Create an index on the view. 
CREATE UNIQUE CLUSTERED INDEX IDX_MyView_ClusteredIndex 
ON dbo.MyView(a, b, c) 

GO 
+0

Không thể lược đồ ràng buộc xem 'MyView' vì tên 'MyTable' không hợp lệ cho ràng buộc lược đồ. Tên phải ở định dạng hai phần và một đối tượng không thể tham chiếu chính nó. –

+3

Thêm "dbo". bên cạnh tên chế độ xem của bạn. –

+2

"dbo". nên ở bên cạnh các bảng mà chế độ xem đang đọc. –

1

Tôi đang tìm chính xác nội dung được đăng bởi Darth Continent. Điều này làm việc như một say mê, tuy nhiên, đó là một hoàn cảnh khác hoàn toàn. Tôi tin rằng câu trả lời ở trên ít nhất phải được ghi nhận là giải pháp, và nếu không theo dõi sẽ là tuyệt vời.

+0

Điều này làm việc cho tôi: TẠO XEM [dbo]. [PERSON_V] VỚI SCHEMABINDING AS SELECT SL_LAST_NAME + '; '+ SL_FIRST_NAME AS RES_NAME, ASSIGNED_ORG, Person_Id, [USER_NAME] AS WINDOWS_ACCOUNT, OFFICE_BUILDING, OFFICE_ROOM, MAIL_STOP, OFFICE_PHONE, JOB_TITLE, RES_TYPE, '[email protected]' AS EMAIL_ADDR, PARENT_RSRC_ID TỪ dbo.PERSON GO TẠO CHỈ ĐƠN CẦN ĐỘC ĐÁO CHỈ SỐ IX_PERSON_ID TRÊN dbo.PERSON_V (PERSON_ID) GO –