SQL Server sorunu: Yanlış sözdizimi ‘44446’ | sıcak çevrimiçi

Womanne

Member
SQL Server Yükseltme Sihirbazı tarafından oluşturulan tetikleyiciler, SQL Server 2012 ve 2014 ile uyumlu değildir.


Bir müşterinin sunucularından bazılarını yükseltmek için tatiller arasında bir müşteride kapatmayı kullandım. SQL Server bana kötü bir sürpriz yaptı. Bir veritabanı sunucusunu SQL Server 2008’den SQL Server 2014’e yükselttikten sonra, bazı (ancak tümü değil) veritabanı tablolarının yazma erişimi şu hata mesajıyla reddedildi: ‘44446’ yakınında yanlış sözdizimi. Sorunu başka bir sistemde yeniden oluşturabildim.

Sebebe yönelik araştırma, etkilenen veritabanı tabloları için aşağıdakileri içeren bir tetikleyici olduğunu ortaya çıkardı:

BEGIN
RAISERROR 44447 'Der Datensatz kann nicht hinzugefügt oder
geändert werden. Aufgrund der Regeln für die referenzielle Integrität
ist in der Tabelle ''xyz'' ein verknüpfter (verwandter) Datensatz
erforderlich.'
...
END

Raiserror kullanımına yönelik bu sözdizimi, SQL Server’ın 2012 sürümünden itibaren artık desteklenmemektedir. Sözdizimi şimdi:

RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state } [ ,argument [ ,...n ] ] )
[ WITH option [ ,...n ] ]

Örneğin, şimdi şöyle görünmelidir:

RAISERROR ('44446 Der Datensatz kann nicht hinzugefügt oder
geändert werden. Aufgrund der Regeln für die referenzielle
Integrität ist in der Tabelle 'xyz'' ein verknüpfter (verwandter)
Datensatz erforderlich.',16,1)


Web’de şu notu buldum: “SQL 2012, Raiserror’un belgelenmemiş sürümünü desteklemiyor”.

Tamam, eski sözdizimi belgelenmemişse, soru şu olur: bunu hangi geliştirici yaptı?

Ancak müşteride geliştirici yoktu. Tetikleyici manuel olarak oluşturulmadığı, birkaç yıl önce “Microsoft SQL Server Yükseltme Sihirbazı” tarafından bir Microsoft Access veritabanından oluşturulduğundan, bunlar Microsoft’un kendisinin geliştiricileriydi. Bu sihirbazla doldurulmuş veritabanlarını yükseltirken dikkatli olun.


()



Haberin Sonu
 
Üst