Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

kesalahan saat memasukkan ke dalam tabel yang memiliki alih-alih pemicu dari kerangka data entitas

Menggunakan Entity Framework 4.1, solusi yang diposting oleh Ladislav untuk menambahkan Select of Scope_Identity() ke akhir badan pemicu memecahkan masalah bagi saya. Saya telah menyalin seluruh pembuatan pemicu di sini untuk kelengkapan. Dengan definisi pemicu ini, saya dapat menambahkan baris ke tabel menggunakan 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

Edit untuk menangani nilai yang dihitung (Terima kasih kepada Chris Morgan di komentar):

Jika Anda memiliki nilai lain yang dihitung dalam tabel, Anda harus memasukkannya ke dalam SELECT juga. Misalnya jika Anda memiliki CreatedDate kolom yang menggunakan GETDATE() Anda akan membuat pilihan seperti ini:

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. Batasi Baris yang Dikembalikan dalam SQL Server Query dengan menggunakan TOP Clause

  2. Apa yang dilakukan sp_reset_connection?

  3. Switch-In Partisi di SQL Server (T-SQL)

  4. UNION ALL vs kondisi ATAU dalam permintaan server sql

  5. Kunci Asing ke kunci non-primer