查询结果太长而无法显示

时间:2017-09-27 07:31:00

标签: for-loop sql-server-2005 export

我有一个非常大的xml结果的查询。这是每个客户在过去六个月内显示他所有发票的线索。网格只显示前100个结果。我试着将它存储在变量中并打印它,但它会截断每个圆圈结果。所以我认为我需要将变量内容存储在文件中。但我找不到存储变量的解决方案。只有直接查询。但是,如果我存储查询,我会得到一个单独的结果。如果更好,我也可以将var存储在剪贴板中。但我需要了解如何。我只需要这个结果一次。 这是代码:

DECLARE @anno NVARCHAR(MAX);
DECLARE @Cliente NVARCHAR(MAX);
DECLARE @CodiceCliente NVARCHAR(MAX);
DECLARE @Fornitore NVARCHAR(MAX);
DECLARE @CodiceFornitore NVARCHAR(MAX);
DECLARE @datada NVARCHAR(MAX);
DECLARE @dataa NVARCHAR(MAX);
DECLARE @AZIENDA NVARCHAR(MAX);
DECLARE @PIVA NVARCHAR(MAX);
DECLARE @INDIRIZZO NVARCHAR(MAX);
DECLARE @NOME NVARCHAR(MAX);
DECLARE @COGNOME NVARCHAR(MAX);
DECLARE @CAP NVARCHAR(MAX);
DECLARE @COMUNE NVARCHAR(MAX);
DECLARE @PROVINCIA NVARCHAR(MAX);
DECLARE @NAZIONE NVARCHAR(MAX);
DECLARE @CODFISC NVARCHAR(MAX);
DECLARE @DTE NVARCHAR(MAX);
SET @DTE = '';
-------INFO DITTA------
SET @AZIENDA = 'XXXX';
SET @PIVA = 'XXXX';
SET @CODFISC = 'XXXX';
SET @INDIRIZZO ='XXXXx';
SET @NOME = 'XXXXX';
SET @COGNOME = 'XXXXX';
SET @CAP = 'XXXXX';
SET @COMUNE = 'XXXXX';
SET @PROVINCIA = 'XX';
SET @NAZIONE = 'XX';
-------------IMPOSTA INTERVALLO DATE-----
SET @datada =  '2017-01-01 00:00:00.000' --- DATEADD(DAY, -150, GETDATE());
SET @dataa = '2017-07-01 00:00:00.000' ---GETDATE();
---- TROVA CLIENTI ---
DECLARE c CURSOR FOR
SELECT DISTINCT
   CODCONTO,
   DSCCONTO1
   --TESTEDOCUMENTI.NUMERODOC
FROM XXX.dbo.TESTEDOCUMENTI 
INNER JOIN XXX.dbo.ANAGRAFICACF
ON CODCLIFOR=CODCONTO
INNER JOIN XXX.dbo.RIGHEDOCUMENTI
ON PROGRESSIVO=IDTESTA AND TOTNETTORIGA <>'0'
LEFT JOIN XXX.dbo.ANAGRAFICAAGENTI
ON CODAGENTE=CODAGENTE1
LEFT JOIN  XXX.dbo.TABPAGAMENTI
ON CODPAGAMENTO = CODICE
WHERE  XXX.dbo.TESTEDOCUMENTI.DOCCHIUSO = '0' AND XXX.dbo.TESTEDOCUMENTI.BLOCCATO = '0' AND (XXX.dbo.TESTEDOCUMENTI.TIPODOC = 'FVC' OR XXX.dbo.TESTEDOCUMENTI.TIPODOC = 'NDC' OR XXX.dbo.TESTEDOCUMENTI.TIPODOC = 'NAC') AND XXX.dbo.TESTEDOCUMENTI.DATADOC BETWEEN @datada AND @dataa
GROUP BY DSCCONTO1,CODCONTO
----DICHIARO LE VARIABILI PER CLIENTE

----PRENDI IL PRIMO CLIENTE E METTILO NELLA VARIABILE----
OPEN c
FETCH NEXT FROM c INTO @CodiceCliente,@Cliente
--IF @CodiceCliente IS NULL goto finescript;
WHILE @@FETCH_STATUS = 0
    BEGIN

EXEC master..xp_cmdshell 'bcp "DECLARE @anno NVARCHAR(MAX); DECLARE @Cliente NVARCHAR(MAX); DECLARE @CodiceCliente NVARCHAR(MAX); DECLARE @Fornitore NVARCHAR(MAX); DECLARE @CodiceFornitore NVARCHAR(MAX); DECLARE @datada NVARCHAR(MAX); DECLARE @dataa NVARCHAR(MAX); DECLARE @AZIENDA NVARCHAR(MAX); DECLARE @PIVA NVARCHAR(MAX);DECLARE @INDIRIZZO NVARCHAR(MAX); DECLARE @NOME NVARCHAR(MAX);DECLARE @COGNOME NVARCHAR(MAX);DECLARE @CAP NVARCHAR(MAX);DECLARE @COMUNE NVARCHAR(MAX);DECLARE @PROVINCIA NVARCHAR(MAX);DECLARE @NAZIONE NVARCHAR(MAX); DECLARE @CODFISC NVARCHAR(MAX); SELECT DISTINCT @NAZIONE AS "CedentePrestatoreDTE/IdentificativiFiscali/IdFiscaleIVA/IdPaese",@PIVA AS "CedentePrestatoreDTE/IdentificativiFiscali/IdFiscaleIVA/IdCodice",@CODFISC AS "CedentePrestatoreDTE/IdentificativiFiscali/CodiceFiscale",@AZIENDA AS "CedentePrestatoreDTE/AltriDatiIdentificativi/Denominazione",@INDIRIZZO AS "CedentePrestatoreDTE/AltriDatiIdentificativi/Sede/Indirizzo",@CAP AS "CedentePrestatoreDTE/AltriDatiIdentificativi/Sede/CAP",@COMUNE AS "CedentePrestatoreDTE/AltriDatiIdentificativi/Sede/Comune",@PROVINCIA AS "CedentePrestatoreDTE/AltriDatiIdentificativi/Sede/Provincia",@NAZIONE AS "CedentePrestatoreDTE/AltriDatiIdentificativi/Sede/Nazione",ANAGRAFICACF.CODICEISO AS "CessionarioCommittenteDTE/IdentificativiFiscali/IdFiscaleIVA/IdPaese", ANAGRAFICACF.PARTITAIVA AS "CessionarioCommittenteDTE/IdentificativiFiscali/IdFiscaleIVA/IdCodice",ANAGRAFICACF.CODFISCALE AS "CessionarioCommittenteDTE/IdentificativiFiscali/CodiceFiscale",ANAGRAFICACF.DSCCONTO1 AS "CessionarioCommittenteDTE/AltriDatiIdentificativi/Denominazione",ANAGRAFICACF.INDIRIZZO AS "CessionarioCommittenteDTE/AltriDatiIdentificativi/Sede/Indirizzo",ANAGRAFICACF.CAP AS "CessionarioCommittenteDTE/AltriDatiIdentificativi/Sede/CAP",ANAGRAFICACF.LOCALITA AS "CessionarioCommittenteDTE/AltriDatiIdentificativi/Sede/Comune",ANAGRAFICACF.PROVINCIA AS "CessionarioCommittenteDTE/AltriDatiIdentificativi/Sede/Provincia",ANAGRAFICACF.CODICEISO AS "CessionarioCommittenteDTE/AltriDatiIdentificativi/Sede/Nazione",CASE WHEN TESTEDOCUMENTI.TIPODOC = ''FVC'' THEN ''TD01'' WHEN TESTEDOCUMENTI.TIPODOC = ''NDC'' THEN ''TD05'' WHEN TESTEDOCUMENTI.TIPODOC = ''NAC'' THEN ''TD04'' ELSE NULL END AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiGenerali/TipoDocumento",REPLACE (CONVERT(VARCHAR(12),TESTEDOCUMENTI.DATADOC,111), ''/'',''-'') AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiGenerali/Data",TESTEDOCUMENTI.NUMERODOC AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiGenerali/Numero",TOTIMPONIBILE AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiRiepilogo/ImponibileImporto",TOTIMPOSTA AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiRiepilogo/DatiIVA/Imposta",ALIQUOTA AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiRiepilogo/DatiIVA/Aliquota",CODIVA,CASE WHEN TRATTAMENTOIVA.DESCRIZIONE LIKE ''%ART%15%'' THEN ''N1'' WHEN TRATTAMENTOIVA.DESCRIZIONE LIKE ''%N.I.%'' THEN ''N3'' WHEN TRATTAMENTOIVA.DESCRIZIONE LIKE ''ES%'' AND TRATTAMENTOIVA.DESCRIZIONE NOT LIKE ''ESC%'' THEN ''N4'' WHEN TRATTAMENTOIVA.DESCRIZIONE LIKE ''%AUTOFATT%'' THEN ''N6'' WHEN TRATTAMENTOIVA.DESCRIZIONE LIKE ''%40%'' OR TRATTAMENTOIVA.DESCRIZIONE LIKE ''%41%'' OR TRATTAMENTOIVA.DESCRIZIONE LIKE ''%74%'' THEN ''N7'' ELSE '' END AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiRiepilogo/Natura",100-INDETRAIBILITA AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiRiepilogo/Detraibile",''I'' AS "CessionarioCommittenteDTE/DatiFatturaBodyDTE/DatiRiepilogo/EsigibilitaIVA",TESTEDOCUMENTI.DATADOC FROM XXX.dbo.TESTEDOCUMENTI INNER JOIN XXX.dbo.ANAGRAFICACF ON CODCLIFOR=CODCONTO LEFT JOIN XXX.dbo.ANAGRAFICAAGENTI ON CODAGENTE=CODAGENTE1 LEFT JOIN  XXX.dbo.TABPAGAMENTI ON CODPAGAMENTO = CODICE INNER JOIN XXX.dbo.RIGHEDOCUMENTI ON RIGHEDOCUMENTI.NUMERODOC = TESTEDOCUMENTI.NUMERODOC INNER JOIN XXX.dbo.TRATTAMENTOIVA ON TRATTAMENTOIVA.CODICE = RIGHEDOCUMENTI.CODIVA WHERE  CODCLIFOR = @CodiceCliente AND XXX.dbo.TESTEDOCUMENTI.DOCCHIUSO = ''0'' AND XXX.dbo.TESTEDOCUMENTI.BLOCCATO = ''0'' AND (XXX.dbo.TESTEDOCUMENTI.TIPODOC = ''FVC'' OR XXX.dbo.TESTEDOCUMENTI.TIPODOC = ''NDC'' OR XXX.dbo.TESTEDOCUMENTI.TIPODOC = ''NAC'')'' AND XXX.dbo.TESTEDOCUMENTI.DATADOC BETWEEN @datada AND @dataa for xml path(''''), elements)" queryout "C:\prova.xml" -x -T'




--PRENDI IL PROSSIMO CLIENTE---
FETCH NEXT FROM c INTO @CodiceCliente,@Cliente
END
--PULISCI---
CLOSE c
DEALLOCATE c

这些是错误:

  

SQLState = 37000,NativeError = 102

     

错误= [Microsoft] [SQL Native Client] [SQL Server]'/'附近的语法不正确。

     

SQLState = 37000,NativeError = 8180

     

错误= [Microsoft] [SQL Native Client] [SQL Server]语句无法准备。

1 个答案:

答案 0 :(得分:0)

您可以使用bcp queryout将结果写入文件。

例如:

EXEC master..xp_cmdshell 'bcp "SELECT TOP * FROM [SampleDB].[dbo].[SampleTable] FOR XML AUTO, ELEMENTS" queryout "C:\temp\data.xml" -E -c -T -x'