使用bcp嵌套INNER JOIN

时间:2016-06-16 09:22:22

标签: sql sql-server xml bcp

因此,如果没有嵌套的SELECT / INNER JOIN,此查询可以正常工作。 不确定嵌套SELECT有什么问题,有什么想法吗?

所以似乎无法让它与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

这些是我正在使用的表格

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 个答案:

答案 0 :(得分:2)

从我上次提出的问题来看,这是在数据库 Employees.dbo 中。我认为,您应该完全限定所有表格的名称 - 更好 - 在您选择之前放置USE Employees;

我认为,Dani Mathew是对的,有一个逗号丢失了。子选择 - 从主要选择中看 - 只是以包含在输出中。

试试这样:

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