2010-07-29 10 views
11

Ich habe Probleme beim Ausführen einer SQL-Anweisung aus einem gespeicherten Proc mit einfachen Anführungszeichen. Hier ist meine Abfrage von einer gespeicherten Prozedur, die ich ausführe.Verwenden von einzelnen Anführungszeichen in einer Exec-Anweisung in SQL

EXEC('UPDATE myTABLE 
     SET myCOLUMN = (SELECT Replace('OSINGLEQUOTEJOHN DOE','SINGLEQUOTE','''')') 

Ich versuche Tabelle „MyTable“ Spalte „MyColumn“ mit einem Wert „O'John Doe“

Die eigentliche Abfrage wie folgt zu aktualisieren, habe ich versucht, es ein bisschen in der oben zu vereinfachen

Beispiel
EXEC('UPDATE myTABLE 
     SET myCOLUMN = (SELECT Replace('+ @IntegrationGuardian2FullName +','SINGLEQUOTE','''')') 

der Wert von @IntegrationGuardian2FullName ist "OSINGLEQUOTEJOHN Doe". Hoffnung, die mehr Sinn macht.

Kann mir irgendjemand helfen, diese Anfrage zu formatieren?

Antwort

17

Verwendung:

EXEC('UPDATE myTABLE 
     SET myCOLUMN = (SELECT REPLACE(''OSINGLEQUOTEJOHN DOE'', 
             ''SINGLEQUOTE'', 
             ''''''''))') 

Was Sie angegeben haben, benötigt zwei einfache Anführungszeichen um die Zeichenfolge und was zu ersetzen ist, und zusätzliche einfache Anführungszeichen wegen der für dynamisches SQL erforderlichen einfachen Anführungszeichen.

+0

Gibt eine "Falsche Syntax in der Nähe von ')". " Error. – Mithil

+0

@Mithil Deshmukh: Sorry, vergaß das letzte ")" - korrigiert, funktioniert für mich auf SQL Server 2008 Express. –

+0

Vielen Dank OMG Poines, das hat den Trick gemacht. – Mithil

1
UPDATE myTABLE SET myCOLUMN='O''John Doe' 

EXEC('UPDATE myTABLE SET myCOLUMN=''O''John Doe''') 
8

Sie benötigen, um den Apostroph in der Zeichenfolge in Anführungszeichen doppelt zu entkommen - also zwei einfache Anführungszeichen verwenden, um die Zeichenfolge zu wickeln, und vier (dh zwei entkam Anführungszeichen), die in ein Paar von einzelnen un-escaped wird Anführungszeichen, wenn die Abfrage wird analysiert, und dann un-escaped wieder in den Apostroph wollen Sie tatsächlich einzufügen:

EXEC('UPDATE myTable SET myColumn = ''John''''O Doe''') 
+0

Danke, Dylan, das war hilfreich. – Mithil

2

Während die Antwort von OMG Ponies perfekt war und mir auch half, war mir nicht sofort klar, wie das funktionierte. Hier ist, wie ich verstanden habe, und kann helfen, OP oder jemand anderen immer noch suchen, auf jede Situation anzuwenden.

ein einfaches Beispiel für die Verwendung sp_change_users_login 'update_one', 'LName','Uname'

Transformed select (' sp_change_users_login ''update_one '', ''LName '' ,''Uname '' ')

Alles, was bisher getan hat, ist, as OMG Ponies said, die gesamte Anweisung in einfachen Anführungszeichen wickeln ('). Fügen Sie dann für jedes einzelne bereits vorhandene Anführungszeichen (') einen weiteren voran ('). Ich bin nicht in der Lage, die einzelnen Anführungszeichen, die in der zweiten Anweisung hinzugefügt wurden, fett zu machen, um es deutlich sichtbar zu machen.

Verwandte Themen