Ich kann nicht dynamische where-Klausel funktionieren. Die Abfrage ich benutze:Verwenden der dynamischen WHERE-Klausel mit sp_executesql
IF NOT EXISTS (SELECT *
FROM sys.tables
WHERE name = 'a')
BEGIN
CREATE TABLE a (a INT);
END;
DECLARE @whereClause NVARCHAR(MAX) = ' 1=1 ';
DECLARE @sql NVARCHAR(MAX) = 'SELECT * FROM a WHERE @whereClause';
EXEC sp_executesql @sql, N'@whereClause NVARCHAR(MAX)', @whereClause;
DROP TABLE a;
Dann weitere Frage wäre: Gibt es eine Möglichkeit zu Debug-Abfrage, die mit sl_executesql ausgeführt wird?
eine Möglichkeit besteht darin, die Abfrage vor der Ausführung zu drucken. Sie können dies tun, indem Sie einfach PRINT @ sql – Mukund
Sie können nicht Teil der SQL-Anweisung als Parameter verwenden. Sie könnten vorher eine ganze Anweisung erstellen ('set @sql = 'select ... where' + @ where'), aber das ist sowieso eine schlechte Idee (Ich mag Klauseln wie' 1 = 0; drop table a --') :) – Arvo
Sie können einen Teil der Abfrage nicht als Variable übergeben. Konstruieren Sie Ihre Abfrage dynamisch einschließlich der WHERE-Klausel. – Pred