2016-06-16 11 views
0

So funktioniert diese Abfrage gut ohne die geschachtelte SELECT/INNER JOIN. Nicht sicher, was mit dem geschachtelten SELECT falsch ist, irgendwelche Ideen?Verschachtelte INNER JOIN mit bcp

So kann nicht scheinen, es in Verbindung mit bcp

SELECT @SQLCmd = + 'bcp ' + 
         '"SELECT ''<?xml version=""1.0"" encoding=""UTF-8""?>'' + ' + 

         ' (SELECT CardId, Initials, firstname, lastname ' + 
         '  (SELECT CardId, SetVal ' + 
         '  FROM Business_data as bd ' + 
         '  INNER JOIN Business_set as bs on bd.SetVal=bs.id ' + 
         '  WHERE bd.CardID=ic.CardID ' + 
         '  FOR XML PATH(''BD''), TYPE ' + 
         '  ) ' + 
         ' FROM IndexCards as ic' + 
         ' FOR XML PATH(''Employee''), ELEMENTS, ROOT(''Employees'')) "' + 
         ' queryout ' + 
        @FileName + 
        ' -w -T -S' + @@SERVERNAME 

Dies sind die Tabellen, die ich verwende

Indexcards 

CardId | Initials | firstname | lastname | 
1  | AH  | Ash  | Hart  | 
2  | AL  | Alex  | Lang  | 

Business_set 

ID | Val  | 
1 | Media | 
2 | Tech | 

Business_data 

CardId | SetVal | 
1  | 1  | 
2  | 1  | 
2  | 2  | 
+1

Haben Sie ein Komma nach ‚Nachnamen‘ in der verschachtelten SELECT-Abfrage zu verpassen. –

+0

@DaniMathew Nein, ich glaube nicht, dass ich es tue, es ist die geschachtelte SELECT, die mir Probleme gibt – JJonson

+0

@JJonson, Fragen entlang der Linien "Warum funktioniert mein Code nicht?" sind in SO nicht erlaubt. Lesen Sie: http://stackoverflow.com/help/on-topic – Alex

Antwort

2

von Ihrer letzten Frage, die ich nehme, dass diese Arbeit zu bekommen ist in der Datenbank Employees.dbo. Ich denke, dass Sie entweder alle Namen Ihrer Tabelle vollständig qualifizieren sollten - besser - platzieren Sie eine USE Employees; vor Ihrer Auswahl.

Und ich denke, dass Dani Mathew recht hat, dass es ein Komma fehlt. Die Unterauswahl ist - gesehen von der Hauptauswahl - nur eine Spalte, die in der Ausgabe enthalten ist.

es so versuchen:

SELECT @SQLCmd = + 'bcp ' + 
         '"USE Employees; SELECT ''<?xml version=""1.0"" encoding=""UTF-8""?>'' + ' + 

         ' (SELECT CardId, Initials, firstname, lastname, ' + 
         '  (SELECT CardId, SetVal ' + 
         '  FROM dbo.Business_data as bd ' + 
         '  INNER JOIN dbo.Business_set as bs on bd.SetVal=bs.id ' + 
         '  WHERE bd.CardID=ic.CardID ' + 
         '  FOR XML PATH(''BD''), TYPE ' + 
         '  ) ' + 
         ' FROM dbo.IndexCards as ic' + 
         ' FOR XML PATH(''Employee''), ELEMENTS, ROOT(''Employees'')) "' + 
         ' queryout ' + 
       @FileName + 
       ' -w -T -S' + @@SERVERNAME 
+0

Awesome stuff! Ich musste mit den voll qualifizierten Tabellennamen gehen, nicht sicher, warum USE nicht funktioniert hat. Vielen Dank! – JJonson