Il carattere pipe ha un significato speciale nei comandi batch, quindi deve essere escape usando il carattere accento circonflesso. Questo dovrebbe funzionare:
DECLARE @Text AS VARCHAR(100)
DECLARE @Cmd AS VARCHAR(100)
SET @Text = 'Hello world^| '
SET @Cmd ='echo ' + @Text + ' > C:\AppTextFile.txt'
EXECUTE Master.dbo.xp_CmdShell @Cmd
Anche se questo non è davvero un buon modo per scrivere dati in un file di testo:di solito SQL Server non dovrebbe avere l'autorizzazione per scrivere nella radice dell'unità C:e xp_cmdshell
è disabilitato per impostazione predefinita. Ti suggerisco di guardare alternative come sqlcmd.exe
, bcp.exe
o un piccolo script nella tua lingua preferita (PowerShell, Perl, Python, qualunque cosa).
In genere è molto più semplice, più sicuro e più flessibile interrogare i dati da SQL Server piuttosto che estrarli dal lato server. Nel tuo caso specifico, sembra che tu voglia scrivere un file delimitato e bcp.exe
è destinato a tale scopo
.