Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL代理搞乱了连接字符串中的特殊字符_Sql Server_Ssis_Sql Agent Job - Fatal编程技术网

Sql server SQL代理搞乱了连接字符串中的特殊字符

Sql server SQL代理搞乱了连接字符串中的特殊字符,sql-server,ssis,sql-agent-job,Sql Server,Ssis,Sql Agent Job,我正在导出到一个平面文件,该文件位于一个路径中,不幸的是,该路径的名称中包含德语特殊字符“ß” 这在VisualStudio中运行良好,但从部署的包中,我得到一个错误,即找不到路径。代理的错误日志中提到了路径本身,但在“ß”处出现了混乱。我已经声明这不是一个文件系统授权问题。此外,我还尝试通过使用(DT_WSTR)转换来确保保存路径的变量值是unicode的 奇怪的是,这个解决方案以前一直没有出现问题。突然,它遇到了这个错误。我不确定是否在服务器上应用了任何更改,但我不这么认为。这对我很有效,所

我正在导出到一个平面文件,该文件位于一个路径中,不幸的是,该路径的名称中包含德语特殊字符“ß”

这在VisualStudio中运行良好,但从部署的包中,我得到一个错误,即找不到路径。代理的错误日志中提到了路径本身,但在“ß”处出现了混乱。我已经声明这不是一个文件系统授权问题。此外,我还尝试通过使用(DT_WSTR)转换来确保保存路径的变量值是unicode的


奇怪的是,这个解决方案以前一直没有出现问题。突然,它遇到了这个错误。我不确定是否在服务器上应用了任何更改,但我不这么认为。

这对我很有效,所以可能您的情况有其他问题

我创建了一个简单的SSIS包,该包将导出到具有当前日期的平面文件

我创建了一个包级参数
ExtractFile
,并将其指向一个非德语命名的路径C:\ssidata\so\output\so\u 67284139.txt

平面文件连接管理器上有一个f(x)glpyh,因为我在ConnectionString上定义了一个表达式作为PackageParameter ExtractFile。这允许我在运行时更改导出路径

我创造了两份工作。一个按原样运行包,另一个导出到eszett*路径

没有德国工作

DECLARE @ReturnCode int;
DECLARE @jobId binary(16);
EXEC @ReturnCode = msdb.dbo.sp_add_job
    @job_name = N'NoGermans'
,   @enabled = 1
,   @notify_level_eventlog = 0
,   @notify_level_email = 0
,   @notify_level_netsend = 0
,   @notify_level_page = 0
,   @delete_level = 0
,   @description = N'No description available.'
,   @category_name = N'[Uncategorized (Local)]'
,   @owner_login_name = N'sa'
,   @job_id = @jobId OUTPUT;

EXEC @ReturnCode = msdb.dbo.sp_add_jobstep
    @job_id = @jobId
,   @step_name = N'Run package'
,   @step_id = 1
,   @cmdexec_success_code = 0
,   @on_success_action = 1
,   @on_success_step_id = 0
,   @on_fail_action = 2
,   @on_fail_step_id = 0
,   @retry_attempts = 0
,   @retry_interval = 0
,   @os_run_priority = 0
,   @subsystem = N'SSIS'
,   @command = N'/ISSERVER "\"\SSISDB\So\SO_German\SO_67284139.dtsx\"" /SERVER "\".\dev2017\"" /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E'
,   @database_name = N'master'
,   @flags = 0;
是的,德语作业相关部分是参数的赋值,如
/Par ExtractFile;“\“C:\ssisdata\so\output\so_67284139_223;\so_67284139.txt\”

这两个作业都按预期运行并创建了文件

C:\ssisdata\so\output>dir /s *.txt
 Volume in drive C has no label.
 Volume Serial Number is 3AB8-1C01

 Directory of C:\ssisdata\so\output

04/27/2021  10:01 AM                39 so_67284139.txt
               1 File(s)             39 bytes

 Directory of C:\ssisdata\so\output\so_67284139_ß

04/27/2021  10:01 AM                39 so_67284139.txt
               1 File(s)             39 bytes
我的最佳猜测是,您的设置或执行的某些部分使用的是路径的varchar数据类型,而不是nvarchar,但我们需要了解包的细节和SQL代理作业定义。或者您可以根据我的复制进行调整


*也许我应该?Ich spreche kein Deutsch。

您能检查ssis日志中变量的值吗?请确保将变量RaiseChangeEvent的属性设置为true,并在SQL代理中的作业步骤的高级属性中选择“基本日志记录”。我想在错误发生之前确认它是预期值。我将通过绕过变量问题并使用项目配置来解决这个问题。无论如何,非常感谢您详尽的回答。我认为如果您“注入”,可能会有所不同“像您一样从外部输入参数值,或者将其放在包中。但这样尝试是个不错的主意。我会回来报告…在我使用项目/包配置而不是在变量中使用路径之后,它就工作了。我仍然不知道到底是什么导致了这个问题,但因为它解决了我的问题,所以我把这个标记为答案。谢谢。
C:\ssisdata\so\output>dir /s *.txt
 Volume in drive C has no label.
 Volume Serial Number is 3AB8-1C01

 Directory of C:\ssisdata\so\output

04/27/2021  10:01 AM                39 so_67284139.txt
               1 File(s)             39 bytes

 Directory of C:\ssisdata\so\output\so_67284139_ß

04/27/2021  10:01 AM                39 so_67284139.txt
               1 File(s)             39 bytes