2016-04-20 5 views
0

Gegeben Larvel 5.2 und eine SQL Server 2005-Datenbank. Ich habe Abfrage so etwas wie dieses:Eloquent mit deklarierter Tabelle zur Verwendung in der Abfrage

declare @mapping_table table(id int, name varchar(255), mapping_value varchar(255)) 

insert into @mapping_table values (1, 'foo', 'A1') 
insert into @mapping_table values (2, 'bar', 'A1') 
insert into @mapping_table values (3, 'baz', 'A2') 

select distinct(lookup_field) 
from production_table 
where lookup_field not in (
    select name 
    from @mapping_table 
) 

Wenn ich diese mit Eloquent laufen wie folgt: DB::connection('sqlsrv')->select($query) Ich erhalte den Fehler The active result for the query contains no fields.

Hintergrund: Ich erstelle eine app, die bestimmte Abfragen in einem gültigen Ergebnis führen wird sichergestellt, Zur Berichterstellung festgelegt. Meistens diese Ara-Datenzuordnungen für Freitexteingabe in eine definierte Liste von Optionen. Wenn in der Produktion ein neuer Freitexteintrag gefunden wird, sollte eine Abfrage die nicht zugeordneten Werte erwähnen, damit ich sie zur definierten Tabelle hinzufügen kann.

Ich habe keinen Schreibzugriff auf die Produktionsdatenbank, nur lesen. Das Erstellen gespeicherter Prozeduren ist aufgrund dieser Einschränkung keine Option. Wenn ich die Abfrage in SQL Server Management Studio kopiere, funktioniert es wie Charme. Ich vermute, das liegt daran, dass SSMS die Ergebnisse intern trennt und Eloquent nicht.

Wie kann ich eine Abfrage wie die gegebene bekommen, um mit Eloquent zu arbeiten?

+0

Was genau meinen Sie mit dem Tag [common-table-expression]? Gewöhnliche Tabellenausdrücke (CTEs) wurden erst eingeführt, als SQL Server 2008 – Shaneis

+0

ich annahm, dass die Deklaration einer Tabelle auch ein allgemeiner Tabellenausdruck war? Vielleicht irre ich mich deswegen. Wenn ja, Entschuldigung für die Verwirrung. – Ben

+0

Versuchen Sie 'SET NOCOUNT ON; 'vor Ihrer Abfrage, um zu verhindern, dass mssql die betroffene Zeilenanzahl zurückgibt, die als Ergebnismenge mit _no fields_ –

Antwort

0

Reine Spekulation, aber erfordert eloquent Spaltennamen? Versuchen

Select distinct(lookup_field) as lookup_field 
+0

Guter Punkt interpretiert werden kann. Leider erlebe ich dasselbe auch, wenn ich eine Abfrage wie' declare versuche @mytable table (ID int, Name varchar (255)) Einfügen in @table-Werte (1, 'test') Wählen Sie * aus @table results'. Dies bedeutet, dass es sich nicht um ein Problem bei der Spaltenbenennung handelt. – Ben

0

Ich habe gerade versucht, den Befehl unten auf meinem Tinker und es funktionierte gut. Denken Sie daran, "SET NOCOUNT ON" einzuschließen und nur eine Zeile zu formatieren.

DB::connection()->select("SET NOCOUNT ON; declare @mapping_table table(id int, name varchar(255), mapping_value varchar(255)); insert into @mapping_table values (1, 'foo', 'A1'); insert into @mapping_table values (2, 'bar', 'A1'); insert into @mapping_table values (3, 'baz', 'A2'); select distinct lookup_field from production_table where lookup_field not in (select name from @mapping_table)"); 
Verwandte Themen