Flucht einziges Zitat in openquery mithilfe der dynamischen Abfrage
Ich brauche zum abrufen von Daten aus einem verknüpften server mit einem parameter @PickedDate zum Beispiel. Die Abfrage funktioniert, wenn ich überspringen, @A und @B, aber es immer wieder einen Fehler wegen einer fehlenden Apostroph. Bitte beraten Sie, danke.
Abfrage:
Declare @OPENQUERY nvarchar(500), @TSQL nvarchar(max), @LinkedServer nvarchar(20), @A varchar(5), @B varchar(5), @PickedDate varchar(8)
Set @PickedDate = '20150501'
Set @A = 'AAA'
Set @B = 'BBB'
Set @LinkedServer = 'LinkedServerName'
Set @OPENQUERY = 'Select * From Openquery('+ @LinkedServer + ','''
Set @TSQL = 'SELECT cases.casenum, user.username, code
From cases
Inner join user
On cases.casenum = user.user_id
Where cases.date_opened > DateAdd(day,1-datepart(dw,Convert(date,' + @PickedDate + ')), Convert(date,' + @PickedDate + '))
And cases.date_opened <= DateAdd(day,8-datepart(dw,Convert(date,' + @PickedDate + ')), Convert(date,' + @PickedDate + '))
And cases.code IN (' + @A +', ' + @B + ')
ORDER BY casenum'')'
Exec (@Openquery+@TSQL)
OLE DB-provider "MSDASQL" für den Verbindungsserver "LinkedServerName" Nachricht "[Sybase][ODBC Driver][SQL Anywhere]in der Spalte 'AAA' nicht gefunden".
Msg 7321, Ebene 16, Status 2, Zeile 1
Fehler beim vorbereiten der Abfrage "
SELECT cases.casenum, username, code
From cases
Inner join user
On cases.casenum = user.user_id
Where cases.date_opened >
DateAdd(day,1-datepart(dw,Convert(date,20150501)), Convert(date,20150501))
And cases.date_opened <=
DateAdd(day,8-datepart(dw,Convert(date,20150501)), Convert(date,20150501))
And cases.code IN (AAA, BBB)
ORDER BY casenum"
für die Ausführung mit OLE DB-provider "MSDASQL" für den Verbindungsserver "LinkedServerName".
wie über Und Fällen.code IN ('+ chr(39) + @A +', '+ chr(39)+ @B " + chr(39)+ ')
Es verhält sich wie ("' + @A +"', "' + @B + "'). Immer noch gibt "Falsche syntax in der Nähe 'AAA'."
char(39)
stackoverflow.com/questions/14657056/...Es verhält sich wie ("' + @A +"', "' + @B + "'). Immer noch gibt "Falsche syntax in der Nähe 'AAA'."
InformationsquelleAutor kakugiki | 2015-05-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die einfachen Anführungszeichen um die Variablen, da Sie versuchen, machen diese string-Literale. Aber auch erschwerend ist die Tatsache, dass Sie versuchen, erstellen Sie eine SQL-Anweisung in einem string, der enthält noch eine SQL-Anweisung in einem string. So Sie brauchen, um Ihre Zeile zu Lesen wie:
Benötigen Sie zwei Sätze von doppelten Anführungszeichen, so dass das string-literal im inneren des string-literal ist richtig interpretiert. Huh? Recht. 🙂
Letztlich müssen Sie erstellen Sie eine Zeichenfolge, die die gültige SQL-Syntax:
Müssen Sie zwei Anführungszeichen um die AAA und BBB in Ihrem inneren SQL-string denn es ist auch ein SQL-code in einem string. So müssen Sie doppelte Anführungszeichen, um doppelte Anführungszeichen in Ihrem Haupt-string, den Sie erstellen.
Ich meinte, @A und @B, um die Flucht der einzelnen Zitate. In diesem Fall kann ich einfach use cases.code (""AAA"", ""B"").
InformationsquelleAutor Brian Pressler
Müssen Sie die einfachen Anführungszeichen, so erscheinen Sie in der dynamischen Abfrage Kontext. Versuchen Sie, die Linie zu diesem:
Wenn Sie die Fehlermeldung erhalten, was Sie bekommen, wenn Sie PRINT @Openquery+@TSQL ?
InformationsquelleAutor Tab Alleman
Mit Brian Pressler Antwort, die ich schlage vor, Sie erstellen eine Funktion zum formatieren der params-wenn Sie verschiedene openquery Anrufe, manchmal zitieren eine Menge könnte eyebreaker.
Dann können Sie es in Ihrem openqueries wie diese:
InformationsquelleAutor 4D1C70