Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

EF4 - Thủ tục được lưu trữ đã chọn trả về không có cột nào

EF không hỗ trợ nhập các thủ tục đã lưu trữ mà xây dựng tập kết quả từ:

  • Truy vấn động
  • Bảng tạm thời

Lý do là để nhập thủ tục EF phải thực thi nó . Thao tác như vậy có thể nguy hiểm vì nó có thể kích hoạt một số thay đổi trong cơ sở dữ liệu. Do đó EF sử dụng lệnh SQL đặc biệt trước khi thực thi thủ tục được lưu trữ:

SET FMTONLY ON

Bằng cách thực hiện lệnh này, thủ tục được lưu trữ sẽ chỉ trả về "siêu dữ liệu" về các cột trong tập kết quả của nó và nó sẽ không thực thi logic của nó. Nhưng vì logic không được thực thi nên không có bảng tạm thời (hoặc truy vấn động được xây dựng) nên siêu dữ liệu không chứa gì.

Bạn có hai lựa chọn (ngoại trừ lựa chọn yêu cầu viết lại quy trình đã lưu trữ của bạn để không sử dụng các tính năng này):

  • Xác định kiểu phức tạp trả về theo cách thủ công (tôi đoán nó sẽ hoạt động)
  • Sử dụng một bản hack và chỉ để thêm quy trình được lưu trữ ở đầu SET FMTONLY OFF . Điều này sẽ cho phép phần còn lại của mã SP của bạn thực thi theo cách bình thường. Chỉ cần đảm bảo rằng SP của bạn không sửa đổi bất kỳ dữ liệu nào vì những sửa đổi này sẽ được thực thi trong quá trình nhập! Sau khi nhập thành công, hãy xóa bản hack đó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trả lại tất cả các nhóm tệp cho cơ sở dữ liệu hiện tại trong SQL Server

  2. Sự khác biệt giữa #temptable và ## TempTable?

  3. Cách INTERSECT hoạt động trong SQL Server

  4. Chuyển đổi không thành công khi chuyển đổi ngày và / hoặc giờ từ chuỗi ký tự trong khi chèn ngày giờ

  5. INFORMATION_SCHEMA so với sysobjects