SQL 代理弄乱了连接字符串中的特殊字符
SQL Agent messing up special characters in connection string
我正在导出到一个平面文件,该文件位于一个路径中,不幸的是,该文件的名称中包含德语特殊字符“ß”。
这在 Visual Studio 中工作正常,但在部署的包中我收到一条错误消息,指出找不到路径。路径本身在代理的错误日志中提到,但在“ß”处搞砸了。我已经断言这不是文件系统授权问题。我还试图通过使用 (DT_WSTR).
转换它来确保保存路径的变量值是 unicode
St运行够了,解决方案之前一直没有问题。一下子就变成了运行这个错误。我不确定服务器上是否应用了任何更改,但我不这么认为。
它对我有用,所以你的情况可能有其他问题。
我创建了一个简单的 SSIS 包,它导出到带有当前日期的平面文件。
我创建了一个包级参数 ExtractFile
并将其指向 C:\ssisdata\so\output\so_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_ß\so_67284139.txt\"
DECLARE @ReturnCode int;
DECLARE @jobId binary(16);
EXEC @ReturnCode = msdb.dbo.sp_add_job
@job_name = N'ZeeGermans'
, @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 ExtractFile;"\"C:\ssisdata\so\output\so_67284139_ß\so_67284139.txt\"" /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E'
, @database_name = N'master'
, @flags = 0;
两个作业 运行 和按预期创建的文件
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 代理作业定义.或者你可以对着我的复制品
*也许我应该called it sharfes? Ich spreche kein Deutsch.
我正在导出到一个平面文件,该文件位于一个路径中,不幸的是,该文件的名称中包含德语特殊字符“ß”。
这在 Visual Studio 中工作正常,但在部署的包中我收到一条错误消息,指出找不到路径。路径本身在代理的错误日志中提到,但在“ß”处搞砸了。我已经断言这不是文件系统授权问题。我还试图通过使用 (DT_WSTR).
转换它来确保保存路径的变量值是 unicodeSt运行够了,解决方案之前一直没有问题。一下子就变成了运行这个错误。我不确定服务器上是否应用了任何更改,但我不这么认为。
它对我有用,所以你的情况可能有其他问题。
我创建了一个简单的 SSIS 包,它导出到带有当前日期的平面文件。
我创建了一个包级参数 ExtractFile
并将其指向 C:\ssisdata\so\output\so_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_ß\so_67284139.txt\"
DECLARE @ReturnCode int;
DECLARE @jobId binary(16);
EXEC @ReturnCode = msdb.dbo.sp_add_job
@job_name = N'ZeeGermans'
, @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 ExtractFile;"\"C:\ssisdata\so\output\so_67284139_ß\so_67284139.txt\"" /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E'
, @database_name = N'master'
, @flags = 0;
两个作业 运行 和按预期创建的文件
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 代理作业定义.或者你可以对着我的复制品
*也许我应该called it sharfes? Ich spreche kein Deutsch.