你如何写入一个有空格的文件夹?

Jam*_*mes 5 sql-server command-line ssis

我有一堆简单的 SSIS 包,可以将 SQL 数据输出到 excel,然后我重命名文件并将它们移到最终用户。

他们中的一些人使用带有空格的文件路径,他们对使用新文件夹并不感兴趣。这是我正在使用的代码:

    declare @date varchar(25),
    @sql varchar(1000)

    set @date = cast(datepart(month, current_timestamp) as varchar(2)) + '_' +  cast(datepart(day, current_timestamp) as varchar(2)) + '_' +  cast(datepart(year, current_timestamp) as varchar(4))
    print @date

    set @sql = 'copy D:\Data\ED_72.xlsx \\ehsintra3\ED_72_weekly\ED_72_' + @date + '.xlsx';
    print @sql

    exec  xp_cmdshell @sql
Run Code Online (Sandbox Code Playgroud)

但如果没有下划线,它就无法工作。

问题如何在没有下划线的情况下进行这项工作?

Han*_*non 8

您应该(几乎总是)将路径括在引号内。所以,像这样:

declare @date varchar(25),
@sql varchar(1000);

set @date = cast(datepart(month, current_timestamp) as varchar(2)) + ' ' +  cast(datepart(day, current_timestamp) as varchar(2)) + ' ' +  cast(datepart(year, current_timestamp) as varchar(4));
print @date;

set @sql = 'copy "D:\Data\ED_72.xlsx" "\\ehsintra3\ED 72 weekly\ED 72 ' + @date + '.xlsx"';
print @sql;

exec  xp_cmdshell @sql;
Run Code Online (Sandbox Code Playgroud)

将路径放在引号内可确保命令处理器能够理解路径的开始和结束位置。

此外,copy您可能想查看robocopy或,而不是使用xcopy。该copy命令是残酷的软弱和脆弱。

另外,请注意,在 T-SQL 中的语句末尾添加分号。


bil*_*nkc 6

另一种方法是在 SSIS 本身中使用文件系统任务。它处理“复杂”的路径和文件名,而没有繁琐和xp_cmdshell逃避的风险。

什么风险?双引号参数有限制。

另请参阅在 Stack Overflow 上将传递给 xp_cmdshell 的命令参数转义到 dtexec