2017-05-04 3 views
0

Ich habe diesen Fehler Sqlcmd: Error: Syntax error at line 2 near command '1', wenn ich die sqlcmd für ein Skript ausführen. Als ich das Drehbuch überprüfen fand ich, dass

INSERT INTO ABC.TableA(Name, Descr) VALUES ('Payment', N'$(162.66)') 

Also, wenn ich online überprüfen, einige Variablen wie $(xxxx) für sqlcmd sind. Wie kann ich das Problem lösen? Ich verwende Microsoft SQL. Danke.

+1

Versuchte Escape-Zeichen verwendet wie ‚\ $‘? Weil $ als Variablenersatz während der Ausführung von sqlcmd –

+0

@KannanKandasamy gilt, vielen Dank für die Antwort. Ich habe versucht, über das Escape-Zeichen für sqlcmd zu finden und fand diesen Link http://www.robvanderwoude.com/escapechars.php aber $ ist nicht in der Liste – kevin

Antwort

1

Es gibt kein Escape-Zeichen, und ja, das ist dumm. Entweder deaktivieren Variablensubstitution mit der -x Option, wenn Sie nicht mit Variablen zu beginnen, oder brechen den Ausdruck nach oben, so dass es keine parst mehr als Variablensubstitution:

INSERT INTO ABC.TableA(Name, Descr) VALUES ('Payment', N'$' + N'(162.66)') 

Darauf achten, dass das Ergebnis ist immer noch von der richtige Typ, falls erforderlich.

In dem seltenen Fall, in dem auch dies nicht möglich ist (weil ein Stringliteral erforderlich ist und Ausdrücke ist nicht zulässig) Sie sie, anstatt sie beitreten zu schlagen, und eine Variable auf den gewünschten Wert eingestellt:

:setvar descr $(1.2) 
INSERT INTO ABC.TableA(Name, Descr) VALUES ('Payment', N'$(descr)') 

Offensichtlich ist dies eher Kopfschmerzen induzieren, so ist es ein Glück, dass eine Anforderung für Literale selten ist. Wenn Sie dies viele Male tun müssen, sind Sie mit einer Variablen besser dran, nur für $ selbst:

:setvar dollar $ 
INSERT INTO ABC.TableA(Name, Descr) VALUES ('Payment', N'$(dollar)(1.2)')