Het pipe-teken heeft een speciale betekenis in batch-opdrachten, dus het moet ontsnapt met behulp van het caret-teken. Dit zou moeten werken:
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
Hoewel dit echt geen goede manier is om gegevens naar een tekstbestand te schrijven:normaal gesproken zou SQL Server geen toestemming moeten hebben om naar de hoofdmap van de C:-schijf te schrijven, en xp_cmdshell
is standaard uitgeschakeld. Ik raad je aan naar alternatieven te kijken zoals sqlcmd.exe
, bcp.exe
of een klein script in de taal van uw voorkeur (PowerShell, Perl, Python, wat dan ook).
Het is over het algemeen veel gemakkelijker, veiliger en flexibeler om gegevens uit SQL Server op te vragen dan om het vanaf de server te pushen. In uw specifieke geval lijkt het erop dat u een bestand met scheidingstekens wilt wegschrijven en bcp.exe
is daarvoor bedoeld
.