【发布时间】:2018-02-20 11:49:42
【问题描述】:
我认为在 FOR XML 和 CTE 旁边使用 bcp 有一些“独特”之处。 (也许不是?)
如何导出我动态创建的 XML? 如果我的查询实现 CTE,如果我使用 WITH NAMESPACES,如何使用 bcp?
我应该在命名空间和 CTE 周围“包装” bcp 吗?我应该单独创建它然后连接吗? 我尝试了所有方法,但似乎没有任何效果。
我的尝试(当然 bcp 选择在同一行):
... Ansi nulls,quoted ident,created procedure,declared all variables
IF (@tabelaTipaRacuna = 'istdev')
BEGIN
SELECT @SQL =
'WITH XMLNAMESPACES(DEFAULT ''ba.cbbh.crr.retail''), Ent_Posta
AS
(
SELECT e.naziv,p.posta,e.sifra
FROM entitet AS e
INNER JOIN poste AS p ON e.sifra = p.entitet
)
''bcp "SELECT [dbo].[brojracuna](' + @kodBanke + ',i.partija) AS ''AccountNo/BBAN'',
[dbo].[GENERATEIBAN](i.partija) AS ''AccountNo/IBAN'',
' + '''D''' + ' AS ''AccountType'',
(a.ime + ''('' + a.roditel + '')'' + a.prezime) AS ''Name'',
a.embg AS ''UID'',
CASE status
WHEN 2 THEN ''A''
WHEN 4 THEN ''B''
WHEN 8 THEN ''U''
END AS ''Status'',
c.sifra AS ''Territory'',
' + @kodBanke + ' as ''ID_Bank'',
CONVERT(DATETIME,' + 'i.dotvoranje' + ',120) AS ''OpeningDate'',
ISNULL(CONVERT(DATETIME,' + '1' + ',120),'''') AS ''ClosingDate''
FROM adresar AS a
INNER JOIN' + QUOTENAME(@tabelaTipaRacuna) + ' AS i
ON a.embg = i.embg
INNER JOIN Ent_Posta as c
ON a.postbroj = c.posta
FOR XML PATH(''Account''), ROOT(''Accounts'')"' + 'queryout' + @output + ' -c -C65001 -t";" -r"\n" -T -S' + @server;
exec master..xp_cmdshell @sql
END
程序调用:
EXEC [dbo].[generateXML_CRR] @tabelaTipaRacuna = istdev, @output =
'//111.11.11.111/share/CRR.txt', @server = '111.11.11.112'
编辑:
但现在我在一张桌子上收到无效的对象名称。
我希望我的问题不会显得含糊不清,如果是这样,请要求澄清。
打印@SQL 不会表示任何语法错误。
【问题讨论】:
-
我的回答对你有帮助吗?
标签: sql-server bcp sqlxml