„Aktywny wynik nie zawiera pól” przy użyciu PDO z MS SQL
Jestem w trakcie konwertowania niektórych starych stron PHP do korzystania z PDO.
Poniżej znajdują się dwa uproszczone zapytania (nie moje rzeczywiste zapytania), które pomogą zrozumieć problem, który mam ...
SELECT afield INTO #temptable FROM atable WHERE anotherfield = 'somevalue';
SELECT afield,anotherfield,onemorefield FROM atable
WHERE afield NOT IN (SELECT * FROM #temptable);
Powyższe zapytanie zgłasza błąd opisany w tytule (bardziej kompletnie zgłasza błąd krytyczny: nieprzechwycony wyjątek „PDOException” z komunikatem „SQLSTATE [IMSSP]: aktywny wynik dla zapytania nie zawiera żadnych pól.”)
Jeśli zmienię takie zapytanie ...
with (SELECT afield INTO #temptable FROM atable
WHERE anotherfield = 'somevalue') AS temptable;
SELECT afield,anotherfield,onemorefield FROM atable
where afield NOT IN (SELECT * FROM temptable);
Wydaje się, że omija ten błąd, ale ta wersja kwerendy jest strasznie nieefektywna, ponieważ wydaje się uruchamiać kuszące zapytanie dla każdego porównania pojedynczego pola w drugim zapytaniu.
Czy istnieje sposób, aby pierwszy formularz (który tworzy tabelę tymczasową) działał z PDO?
Działało dobrze na starej stronie, która używała mssql.
EDYTOWAĆ: Wiem, że prawdopodobnie mogę to zrobić w „chaotyczny” sposób, tworząc prawdziwą tabelę, uruchom ją w php, następnie uruchom drugie zapytanie (w oddzielnym wywołaniu php), a następnie uruchom trzecie zapytanie, aby usunąć pierwszą tabelę. Ale wolałbym nie uciekać się do tego! :)