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

lỗi khi chèn vào bảng có thay vì kích hoạt từ khung dữ liệu thực thể

Sử dụng Entity Framework 4.1, giải pháp được Ladislav đăng để thêm Select of Scope_Identity () vào cuối phần thân trình kích hoạt đã giải quyết được vấn đề cho tôi. Tôi đã sao chép toàn bộ quá trình tạo trình kích hoạt ở đây cho hoàn chỉnh. Với khả năng loại bỏ trình kích hoạt này, tôi có thể thêm các hàng vào bảng bằng cách sử dụng context.SaveChanges ().

ALTER TRIGGER [dbo].[CalcGeoLoc]
   ON  [dbo].[Address]
   INSTEAD OF INSERT
AS 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT OFF;

-- Insert statements for trigger here
INSERT INTO Address (Street, Street2, City, StateProvince, PostalCode, Latitude, Longitude, GeoLoc, Name)
SELECT Street, Street2, City, StateProvince, PostalCode, Latitude, Longitude, geography::Point(Latitude, Longitude, 4326), Name 
FROM Inserted;

select AddressId from [dbo].Address where @@ROWCOUNT > 0 and AddressId = scope_identity();
END

Chỉnh sửa để xử lý các giá trị được tính toán (Cảm ơn Chris Morgan trong phần bình luận):

Nếu bạn có bất kỳ giá trị được tính toán nào khác trong bảng, bạn cũng sẽ phải đưa chúng vào SELECT. Ví dụ:nếu bạn có CreatedDate cột sử dụng GETDATE() bạn sẽ thực hiện lựa chọn như thế này:

SELECT [AddressId], [CreatedDate] from [dbo].Addresses where @@ROWCOUNT > 0 and AddressId = scope_identity();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm SQL Server AlwaysOn Av sẵn sàng:Cài đặt và Cấu hình. Phần 2

  2. Cách khắc phục lỗi Msg 7325 trong SQL Server:"Đối tượng hiển thị cột có loại CLR không được phép trong truy vấn phân tán"

  3. Cách lấy lại * mọi thứ * từ quy trình được lưu trữ bằng JDBC

  4. Cài đặt cụm chuyển đổi dự phòng SQL Server -1

  5. ràng buộc duy nhất có điều kiện