2009-08-04 9 views
0

Wir haben eine Datenbankanwendung, die seit Monaten läuft, dann hat es plötzlich Fehler gegeben.SQL-Server mit deutschen Ländereinstellungen

Ich bemerkte eine Datetime Float Berechnung Ausnahme, die mit dem Wert 0,05 verglichen wurde. Ich bemerkte auch, dass Daten, die in unsere XML-Protokolldatei geschrieben wurden, im Format d.mm.yy waren.

Offensichtlich ist der Dezimaloperator ',' und das Datumstrennzeichen ist '.'.

Die Anwendung wurde ursprünglich mit den englischen regionalen Einstellungen in Großbritannien installiert. Ich überprüfte die regionalen Einstellungen, die noch britisches Englisch waren.

Ich bemerkte in der Datenbank Verbindungszeichenfolge, der Host wurde angegeben als "Servername \ Instanz, Portnummer", wo ich erwartete "Servername \ Instanz: PortNumber" für eine normal funktionierende Installation.

Irgendwelche Ideen, wo die regionalen Einstellungen erhalten werden? Könnte es auch sein, dass der Benutzer Apps für die Datenbank oder den Benutzer ausführt, der die Datenbank ausführt?

JD.

Antwort

3

Bedienfeld .. regionale Einstellungen.

Das klingt wie ein Client-App-Problem, nicht SQL Server. Wenn sie auf derselben Box installiert sind, nimmt SQL Server keine Einstellungen aus dem Gebietsschema des Betriebssystems.

es, dass der Benutzer der App hat, ist Deutsch locale sein könnte und einige Daten als String übergeben werden, wenn es bereits Schwimmer oder Datetime (mit Client tun locale Handling)

SQL Server nie erkennen, wird auch sein sollte "0,05" in English auch.

SET LANGUAGE GERMAN 

DECLARE @val float 
SET @val = 0,05 --fail 
GO 
DECLARE @dt datetime 
SET @dt = '23 Mrz 2009' --fail 
GO 
DECLARE @dt datetime 
SET @dt = '23.03.2009' --ok 
GO 

Und "Servername \ Instanz, Portnummer" ist für SQL Server korrekt.

+0

SQL Server und die App sind auf der gleichen Box. Ich habe die regionalen Einstellungen überprüft und es wurde auf UK (Englisch) eingestellt. Ich bin mir nicht sicher, wo ich sonst hinschauen sollte. Mit der aktuellen Konfiguration scheint SQL Server unter einem Benutzerkonto ausgeführt zu werden, die App in einem anderen. –

+0

@JD: 1. Ich denke, die App übergibt Zeichenfolgen an SQL Server, keine nativen Datentypen. Wenn dies der Fall ist, müssen Sie sicherstellen, dass der Benutzer für die App in englischer Sprache ist, ungeachtet dessen, was er für Sie oder für den Standard sagt. Wir verwalten verschiedene Gebietsschemata, weil wir Präsentation/Erfassung von SQL-Aufrufen trennen. Wir würden immer "0.05" an unseren Server senden, selbst wenn ein deutscher Benutzer "0,05" eingibt. – gbn

+0

@gbn: Nur das Gebietsschema des Benutzers, der den Client ausführt, überprüft App, es ist in UK (Englisch). Keine Ahnung wohin von hier zu gehen. Alles, was ich weiß, dass es seit Monaten funktionierte, und dann begannen wir, diese Fehler zu bekommen (wie ich schon sagte, schreiben wir auch in eine Logdatei und die Daten begannen mit "." Als Trennzeichen für das Log-Datum-Zeit). –