如何使用带有文本“|”的sql脚本创建文本文件

时间:2013-01-11 09:49:35

标签: sql sql-server sql-scripts

如果我在脚本下运行而没有char“|”它工作,但当我添加char“|”它不起作用 如何添加char“|”使用sql脚本来发送文本文件?

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

谢谢

3 个答案:

答案 0 :(得分:5)

管道符在批处理命令中具有特殊含义,因此必须使用插入符号escaped。这应该有效:

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

虽然这不是将数据写入文本文件的好方法:通常SQL Server不应该有权写入C:驱动器的根目录,并且默认情况下禁用xp_cmdshell。我建议您查看sqlcmd.exebcp.exe等替代方案或您首选语言的小脚本(PowerShell,Perl,Python等)。

从SQL Server查询数据通常比从服务器端推出数据更容易,更安全,更灵活。在您的特定情况下,您似乎想要写出分隔文件,bcp.exe is intended for that purpose

答案 1 :(得分:0)

用两对单引号包装它,

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

答案 2 :(得分:0)

其他方法

DECLARE @File  varchar(300) = 'c:\Temp\out.txt'
DECLARE @Text  varchar(8000) = 'Sample text'
DECLARE @OLE            INT 
DECLARE @FileID         INT

EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT 
EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, @File, 8, 1 
EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, @Text
EXECUTE sp_OADestroy @FileID 
EXECUTE sp_OADestroy @OLE 

使用SP结果检查错误

EXECUTE @result = sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, @File, 8, 1
if @result<>0 GOTO ON_ERROR

Haven找不到阅读错误信息的方法