使用 bcp 的嵌套 INNER JOIN
Nested INNER JOIN with 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 |
根据我回答的最后一个问题,这是在数据库 Employees.dbo 中。我认为,您应该完全限定所有 table 的名称 - 更好 - 在 select.
之前放置一个 USE Employees;
而且我认为 Dani Mathew 是对的,少了一个逗号。子 select 是 - 从主 select 中看到 - 只是一个 列 包含在输出中。
这样试试:
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
所以这个查询在没有嵌套 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 |
根据我回答的最后一个问题,这是在数据库 Employees.dbo 中。我认为,您应该完全限定所有 table 的名称 - 更好 - 在 select.
之前放置一个USE Employees;
而且我认为 Dani Mathew 是对的,少了一个逗号。子 select 是 - 从主 select 中看到 - 只是一个 列 包含在输出中。
这样试试:
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