2015-05-17 8 views
6

Wie ich (in SQL Server Bücher) gefunden:

\ (Backslash) (Transact-SQL)
Bricht eine lange String-Konstante in zwei oder mehr Zeilen für die Lesbarkeit.

und

SELECT Clause (Transact-SQL) ... $IDENTITY | $ROWGUID
Und
$PARTITION (Transact-SQL)
Gibt die Partitionsnummer, in die eine Reihe von Partitionsspaltenwerte für jede angegebene Partitionsfunktion abgebildet werden würde .

der Nutzung von \ und $ in T-SQL speziell SQL Server.

Jetzt habe ich eine Abfrage wie folgt:

SELECT \ a, $ b, \11 c, $12 d; 

, dass ein gültiges Ergebnis wie diese:

a | b | c  | d 
-----+------+-------+------- 
0.00 | 0.00 | 11.00 | 12.00 

Ich denke, es ist etwas, das ich es nicht zu diesen Zeichen finden .

Edit:
Ich fand, dass, wenn eine Nummer nach currency symbols kommt, SQL Server wird das definierte Symbol entfernen und den Wert als Gelddatentyp:

Und ich denke, übersetzen SQL Server eine einzige Währungssymbol, das der letzte Satz in einem Teil ist -Diese Teile sind zwischen +- und - der Formel 0.00 und erst am Ende des Teils, wie -$, ($), (12 + $), ($) + 12, $ * (12 - $) oder so weiter, und nicht $ + 1, 2 * $ - 1. Auch ich fand $ 2 ist das gleiche wie $2.

Alle oben genannten Verhalten ist das gleiche für \, dass SQL Server denkt, dass \ ein Währungssymbol ist !!!

+0

Der Backslash hier nicht Teil eines String-Konstante ist so das dokumentierte Verhalten gilt nicht. Der T-SQL-Parser ist nicht streng, so dass manchmal fehlerhafte Literale und Anweisungen interpretiert werden können. Natürlich ist ein solches undokumentiertes Verhalten fragil, da sich das Verhalten jederzeit ändern und den Code durchbrechen kann. –

+0

"Das bedeutet, dass SQL Server denkt, dass' \ 'ein Währungssymbol ist !!!"- Möglicherweise im Zusammenhang mit der Tatsache, dass in der Vergangenheit häufig verwendete US-ASCII-kompatible japanische Kodierungen das Yensymbol auf den Codepunkt setzten, der im US-ASCII ein Backslash wäre. Es gibt immer noch einige Fonts, die einen Backslash darstellen ein Yen-Symbol – hvd

+2

Dies kann ein Ausgangspunkt für das OP sein oder wer auch immer bereit ist, die Frage zu beantworten: http://www.sqlservercentral.com/blogs/philfactor/2010/07/29/the-killer-backslach-in -tsql/ –

Antwort

7

Ich dachte, den Datentyp zu überprüfen und jeder wie Sie feststellen werden, gibt den Datentyp Geld zurück.

WITH CTE 
AS 
(
    SELECT \ a, $ b, \11 c, $12 d 
) 

SELECT SQL_VARIANT_PROPERTY(a,'baseType') a, 
     SQL_VARIANT_PROPERTY(b,'baseType') b, 
     SQL_VARIANT_PROPERTY(c,'baseType') c, 
     SQL_VARIANT_PROPERTY(d,'baseType') d 
FROM CTE 

Ergebnisse:

a        b        c        d 
------------------------------ ------------------------------ ------------------------------ ------------------------------ 
money       money       money       money