2010-07-05 26 views
11

Tôi gặp lỗi "Không thể sử dụng các cột văn bản, ntext hoặc hình ảnh trong các bảng 'được chèn' và 'đã xóa'". là các trường ntext trong bảng gốc, tôi đã gắn một trình kích hoạt vào.Không thể sử dụng các cột văn bản, ntext hoặc hình ảnh trong các bảng 'đã chèn' và 'đã xóa'

Đây là một giải pháp: http://lazycodeprogrammer.blogspot.com/2009/08/how-to-use-inserteddeleted-with.html

Nhưng ban đầu (không đổi) truy vấn là đủ phức tạp. Tôi nên viết gì thay vì SELECT * FROM INSERTED, sử dụng toán tử JOIN, vì nó được khuyến nghị?

+0

nó là gì bạn muốn làm gì? Bạn có thể cho chúng tôi thấy trình kích hoạt của bạn (ít nhất là các phần liên quan nhất của nó) không? Câu hỏi của bạn không rõ ràng ... –

+0

Tôi đang cố gắng để chèn các hàng được chèn vào trong trình kích hoạt của mình. Nếu tôi thực hiện truy vấn "SELECT * FROM INSERTED", tôi nhận được "Không thể sử dụng các cột văn bản, ntext hoặc hình ảnh trong các lỗi 'đã chèn' và 'đã xóa'". Tôi biết tại sao: vì bảng gốc chứa trường ntext. Tôi nên sửa đổi truy vấn của mình để giải quyết vấn đề này như thế nào? – noober

+0

@noober, nếu bạn không hiển thị bất kỳ SQL nào, tất cả mọi người đều có thể nói là chỉ cần triển khai những gì bạn đã tự đăng trong liên kết của mình. –

Trả lời

8

Một giải pháp tốt đẹp đã được tìm thấy:

  1. CHỌN TỪ chèn chỉ cột id (nó không ntext hoặc hình ảnh và truy vấn đã được thực hiện).
  2. CHỌN từ bảng gốc * có cùng id.
  3. Nếu được yêu cầu, hãy sử dụng UPDATED() trên INSERTED để biết, cột nào đã được thay đổi.
+3

Đây thực sự không phải là giải pháp tuyệt vời. Trong khi nó hoạt động OK với bảng đã chèn, với bảng đã xóa, phương pháp này là sai vì bạn sẽ nhận được các giá trị sau khi cập nhật, không phải trước khi cập nhật. – buhtla

13

Vấn đề thực sự là bạn đang cố gắng chọn các cột trong bảng được chèn có loại ntext, văn bản hoặc hình ảnh. Điều này không được phép trong trình kích hoạt.

Giải pháp thực sự là thay đổi tất cả ntext của bạn thành nvarchar (tối đa), văn bản thành varchar (tối đa) và hình ảnh thành varbinary (max) theo đề xuất của MS.

MS tuyên bố rằng các loại đó không còn được dùng nữa và sẽ bị xóa trong phiên bản sau.

Ngoài ra, ntext thực sự chậm hiệu suất vì không có dữ liệu trong hàng.

+4

LOL. Vâng, vấn đề thực sự nhất là MS cho chúng tôi biết "những loại đó không được chấp nhận và sẽ bị xóa trong phiên bản sau, bla-bla-bla", nhưng chúng sẽ tự sử dụng chúng. Đoán ở đâu? Trong SharePoint DB. Và tôi phải biết, những hàng nào được thay đổi và những trường nào được thay đổi mặc dù NTEXT được sử dụng rộng rãi và tích cực để lưu trữ danh sách. Tôi biết, những gì bạn sẽ nói: "Không sử dụng DB trực tiếp, sử dụng OM thay thế". Làm ơn, đừng. Tôi đã khám phá OM điên rồ cả năm ngoái trong một số dự án, tính hiệu quả và tính năng mà tôi muốn chỉ có ở cấp độ DB. – noober

1

Sử dụng trình kích hoạt "INSTEAD OF" có thể giải quyết sự cố vì trường văn bản, ntext và hình ảnh có sẵn trong bảng "được chèn" và "đã xóa". Nhìn vào số http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=148387 để biết cách thực hiện.

0

Sử dụng trình kích hoạt sau khi chèn vào yourtable:

SELECT textfields 
FROM yourtable 
WHERE EXISTS (
    SELECT 1 
    FROM {inserted/deleted} 
    WHERE {inserted/deleted}.PK = {yourtable}.PK 
) 
Các vấn đề liên quan