Jestem w trakcie konwersji niektórych starych stron PHP, aby korzystać z PDO."Aktywny wynik nie zawiera pól" przy użyciu PDO z MS SQL
Poniżej są dwa uproszczone zapytań (nie moje rzeczywiste zapytań) pomoc w zrozumieniu problemu 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 wyrzuca błąd opisany w tytule (pełniej rzuca „błąd krytyczny: Uncaught wyjątek«PDOException»z komunikatem«SQLSTATE [IMSSP]: aktywna wynik dla zapytania nie zawiera pola.»”)
Gdybym zmienić zapytanie jak to ...
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);
To wydaje się ominąć błąd, ale ta wersja zapytania jest okropnie nieefektywna, ponieważ wydaje się, że uruchamia kwerendę podlegającą kuszeniu dla każdego pojedynczego porównania pól w drugim zapytaniu.
Czy istnieje sposób na zrobienie pierwszej formy (która tworzy jednorazowy tabelę raz) przy pracy z PDO?
To działało dobrze na starej stronie, która używała mssql.
EDIT: wiem chyba mogę to zrobić w „niechlujny” sposób, tworząc prawdziwy stół, uruchom go w php, a następnie uruchomić drugą kwerendę (w osobnej rozmowy php), a następnie uruchomić trzecią zapytanie upuścić pierwszy stół. Ale wolałbym nie uciekać się do tego! :)
Należy pamiętać, że słowa kluczowe SQL, takie jak "SELECT, WHERE, FROM ..." powinny być pisane wielkimi literami. Poprawi to czytelność. Powinieneś zacząć od tego pierwszego – hek2mgl
Jeśli nalegasz! . – MrVimes
Czy faktycznie rozdzielasz zapytania średnikiem ';'? – hek2mgl