我正在尝试编辑通过xp_cmdshell从SQL Server 2008r2调用的现有流程。它会在导入之前替换/删除csv文件中的某些字符。我设法添加删除fullstops但是在删除反引号时遇到问题。我试图逃避它的每一种方式我都得到错误sed:-e expression#1,char 97:Unterminated s'命令。
在SQL中:
DECLARE
@FileLocation VARCHAR(255) = '\\FILELOCATION\'
,@ArchiveLocation VARCHAR(255) = '\\FILELOCATION\Archive\'
,@FileName VARCHAR(50) = 'DATE_FILENAME.csv'
,@UtilitiesLocation VARCHAR(100) = '\\NETWORKLOCATION\UTILITIES\'
,@Command VARCHAR(2000)
DECLARE @SedCommand VARCHAR(100) =
's/£//g;' -- remove pound signs
+ 's/\.//g;' -- remove full stop
+ 's/\`//g;' -- remove grave accent (backtick)
+ 's/\"\([A-Za-z- '']*\),\([A-Za-z- '']*\)\"/\1|\2/g;' -- "Last, First" replaced by Last|First
+ 's/\"\([0-9.-]*\),\([0-9.-]*\)\"/\1\2/g;' -- remove thousands separators in numbers
SET @Command =
'copy '
+ @FileLocation + @FileName + ' '
+ @ArchiveLocation + 'QN' + @FileName
PRINT @Command -- copy \\FILELOCATION\DATE_FILENAME.csv \\FILELOCATION\Archive\QNDATE_FILENAME.csv
EXEC xp_cmdshell @Command
SET @Command =
@UtilitiesLocation + 'sed --text -e '
+ '"' + @SedCommand + '" '
+ @ArchiveLocation + 'QN' + @FileName
+ ' > '
+ @FileLocation + @FileName
PRINT @Command -- \\NETWORKLOCATION\UTILITIES\sed --text -e "s/£//g;s/\.//g;s/\`//g;s/\"\([A-Za-z- ']*\),\([A-Za-z- ']*\)\"/\1|\2/g;s/\"\([0-9.-]*\),\([0-9.-]*\)" \\FILELOCATION\Archive\QNDATE_FILENAME.csv > \\FILELOCATION\DATE_FILENAME.csv
EXEC xp_cmdshell @Command
有人能帮忙吗?我尝试使用3个反斜杠,^作为转义字符,将反引号放在双引号中但无法正常工作。