0

次のコマンドを実行してファイルを生成し、ファイルにvarchar(MAX)大量のデータを入力しようとしています。ここに問題があります。コードを実行しようとすると、ファイルが作成されますが、それらは空です。@classString変数にデータが含まれていることはわかっています。@classStringそれを区切るためにラップすることができる文字列を囲むシーケンスはありますか? スクリプトを生成しようとしているので、 @classString にはファイルの書き込みを妨げる文字が含まれていると想定しています。

SET @sqlString = 'echo off > ' + @FilePath + '\' + @table_name + '.cs"'
exec xp_cmdshell @sqlString
SET @sqlString = 'echo ' + @classString + ' >> ' + @FilePath + '\' + @table_name + '.cs"'
exec xp_cmdshell @sqlString
4

1 に答える 1

0

文字列全体を区切ったり引用したりする簡単な方法はありません。代わりに、^ 記号を使用して文字列内のシェル メタ文字をエスケープする必要があります。例えば:

SET @classString = (SELECT REPLACE(@classString, '>', '^>'))
SET @classString = (SELECT REPLACE(@classString, '&', '^&'))

...など、文字列に含まれる可能性のある cmdshell メタ文字についても同様です。

于 2013-05-08T08:20:34.017 に答える