Als höher in der Hierarchie Forum Benutzer vorgeschlagen Im Postig mein Problem als eine neue Frage zu diesem: declare variable for query string.Variable für Query String
Ich benutze dynamische Abfrage hier, weil ich in der Lage sein möchte, Variablen zu verwenden (ich brauche es für mein Experiment mit Parameter Sniffing). Meine Abfrage sieht wie folgt aus:
DECLARE @i NVARCHAR(10)
SET @i = 'POL'
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT
a.something1,
b.something2,
c.something3
FROM
aaa a WITH(NOLOCK)
LEFT JOIN bbb b WITH(NOLOCK) ON....
LEFT JOIN ccc c WITH(NOLOCK) ON....
WHERE
a.somethingelse = ''aa''
AND
((a.entirelysomethingelse=''aaa'') OR (a.entirelysomethingelse=''aaaa''))
AND
b.anotherdifferentsomething != 41
AND
c.yetanotherdifferentthing LIKE(''%@%'')
AND
c.datafromvariablewannabe = (@i)
GROUP BY
...
ORDER BY
...'
EXECUTE (@SQL)
Wenn ich möchte wie meine Abfrage Ich erhalte Fehler auszuführen:
'Msg 137, Level 15, State 2, Line 28
Must declare the scalar variable "@i".'
Wenn ich Deklaration der Variablen @i in die @sql dann bewegt es sorta funktioniert. Trotzdem glaube ich nicht, dass es das ist, was ich wollte. Mache ich etwas falsch oder hat es so aussehen ?:
DECLARE @sql VARCHAR(MAX)
SET @sql = '
DECLARE @i NVARCHAR(10)
SET @i = 'POL'
SELECT
a.something1,
b.something2,
c.something3
FROM
aaa a WITH(NOLOCK)
LEFT JOIN bbb b WITH(NOLOCK) ON....
LEFT JOIN ccc c WITH(NOLOCK) ON....
WHERE
a.somethingelse = ''aa''
AND
((a.entirelysomethingelse=''aaa'') OR (a.entirelysomethingelse=''aaaa''))
AND
b.anotherdifferentsomething != 41
AND
c.yetanotherdifferentthing LIKE(''%@%'')
AND
c.datafromvariablewannabe = (@i)
GROUP BY
...
ORDER BY
...'
EXECUTE (@SQL)
Gibt es in meinem Code keine Fehler so Im MSG137 Fehler bekommen oder es ist nur unmögliche Aufgabe, die ich hier machen will.
Ich möchte keine gespeicherte Prozedur von dieser Abfrage erstellen. Ich möchte in der Lage sein, Variablen zu verwenden, ohne auf gespeicherte Prozeduren angewiesen zu sein.
Ich entschuldige mich Admins/Forum Benutzer für Probleme mit meiner früheren Frage in Frage gestellt.
was bedeutet das 'Als ich die Deklaration der Variablen @i in die @sql verschoben habe, funktioniert es. Dennoch glaube ich nicht, dass es das ist, was ich wollte – TheGameiswar
Variablen sind auf einen Batch beschränkt und exec läuft in separaten Batch, so müssen Sie es in der gleichen @ sql – TheGameiswar
Ich meinte, dass ich gutes Ergebnis, aber die Methode, diese Ergebnisse zu bekommen war nicht diejenige, nach der ich suchte. Ich wusste nicht, dass ich die Abfragezeichenfolge (wie @mortb suggested) "brechen" muss, damit meine Variable "geladen" werden könnte? da drin. – M3How