1

文字「|」なしでスクリプトの下で実行すると それは機能していますが、文字「|」を追加しているとき 文字「|」を追加する方法が機能していません テキストファイルに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

ありがとう

4

3 に答える 3

7

バッチ コマンドではパイプ文字に特別な意味があるため、キャレット文字を使用してエスケープする必要があります。これはうまくいくはずです:

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デフォルトで無効になっています。のような代替案や、好みの言語 (PowerShell、Perl、Python など) の小さなスクリプトを検討することをお勧めしsqlcmd.exeますbcp.exe

一般に、サーバー側からデータをプッシュするよりも、SQL Server からデータをクエリする方がはるかに簡単で、安全で、柔軟性があります。あなたの特定のケースでは、区切りファイルを書き出したいようで、bcp.exeその目的のために意図されています。

于 2013-01-11T17:57:40.213 に答える
0

2 組の一重引用符で囲み、

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
于 2013-01-11T09:59:05.793 に答える