2009-04-13 1 views
1

Ich versuche, eine große Codebasis zu aktualisieren, um die Werte CultureInfo und/oder IFormatProvider bei der Formatierung/Analyse von Werten korrekt anzugeben. Wenn ich zum Beispiel einen vom Benutzer erhaltenen Wert analysiere, übergebe ich CultureInfo.CurrentCulture beim Aufruf TryParse, und wenn ich einen Gleitkommawert in einen String für Persistenz umwandele, überlasse ich CultureInfo.InvariantCulture beim Aufruf ToString.berücksichtigt SQL Server Kultur/Gebietsschema beim Konvertieren von Werten in/aus Zeichenfolgen?

Meine Frage ist das: Wenn ich SQL-Abfragen erzeuge, sollte ich Zahlen und dergleichen mit der invarianten Kultur oder der Kultur des SQL-Servers formatieren, oder was? Was bedeutet, wenn mein Computer auf Deutsch (Deutschland) eingestellt ist, welche dieser Fragen ist richtig?

select foo from bar where baz = 123.45 

oder

select foo from bar where baz = 123,45 

Ebenso, wenn ich CAST SQLs verwenden, um einen Gleitkommawert in einen String zu konvertieren, welche locale wird SQL für die Umwandlung benutzen?

Ich habe die SQL-Dokumente gesucht, aber bis jetzt kann ich keine guten Antworten finden. Ich habe einige Informationen über Datumsformatierung gefunden (SET DATEFORMAT und ähnliches), aber das war's.

HINWEIS: Ich weiß, dass die bevorzugte Möglichkeit, Eingaben an eine SQL-Abfrage zu übergeben, über Parameter ist. Nehmen wir also aus gutem Grund an, dass ich einen guten Grund habe, sie in die Abfragezeichenfolge zu formatieren. Außerdem ist die Eingabe von Abfrageeingaben nur ein Teil der umfassenderen Frage.

+0

kann helfen: http://StackOverflow.com/Questions/353545/How-Touse-Same-Database-and-Same-Program-for-Two-Different-locales- in-net – boj

Antwort

4

Es wird ein Fehler ausgegeben. Die Sprache von SQL Server wirkt sich nur auf Datums-/Uhrzeitwerte aus.

SET LANGUAGE Deutsch 
SELECT 'true' WHERE 1 <> 123,45 

--gives 
Msg 102, Level 15, State 1, Line 2 
Falsche Syntax in der Nähe von ','. 
There is far too much ambiguity in number formats 

SET LANGUAGE Deutsch 
SELECT 'true' WHERE 1 <> 123.45 
--gives true 

Ich bin in der Schweiz und haben mit allen drei von ihnen zu beschäftigen ...

  • 1.234,56 (DE)
  • 1'234,56 (CH)
  • 1.234,56 (DE-DE)
Verwandte Themen