Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

błąd podczas wstawiania do tabeli mający zamiast wyzwalacza ze struktury danych encji

Za pomocą Entity Framework 4,1 rozwiązanie opublikowane przez Ladislava w celu dodania Select of Scope_Identity() na końcu ciała wyzwalacza rozwiązało problem. Skopiowałem tutaj całą kreację wyzwalacza dla kompletności. Dzięki tej definicji wyzwalacza mogłem dodawać wiersze do tabeli za pomocą 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

Edytuj do obsługi obliczonych wartości (Podziękowania dla Chrisa Morgana w komentarzach):

Jeśli masz w tabeli jakieś inne obliczone wartości, będziesz musiał uwzględnić je również w SELECT. Na przykład, jeśli masz CreatedDate kolumna, która używa GETDATE() dokonasz wyboru w ten sposób:

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. Maksymalny rozmiar zapytania SQL Server? Klauzula IN? Czy istnieje lepsze podejście?

  2. Skrypt do zabijania wszystkich połączeń z bazą danych (więcej niż RESTRICTED_USER ROLLBACK)

  3. Jak znaleźć tabele zawierające określoną kolumnę w SQL Server

  4. EF5:Nie można dołączyć pliku „{0}” jako bazy danych „{1}”

  5. GETDATE() Przykłady w SQL Server (T-SQL)