如何解决 Dtexec 语句如何编写 遇到数据表存在,

img


(是从一个服务器到另一个服务器中的做源到目的文件备份的)
我是通过ssms(sql server)中的“任务- 导入导出命令”,导出的dtxt文件,通过DTEXEC 调用的命令 ,如何正确的配置dtexec
单单是DTEXEC - f "path.dtsx" 不太行,后面需要配置说明参数呐

来自百度GPT对于sql server备份脚本问题,您可以使用以下命令进行备份:

BACKUP DATABASE [数据库名称] TO DISK = '备份文件路径\备份文件名称.bak' WITH NOFORMAT, NOINIT, NAME = '数据库名称-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10

其中,数据库名称是要备份的数据库的名称,备份文件路径是备份文件保存的路径,备份文件名称是备份文件的名称。

如果您不想删除数据库中的表,可以在备份之前使用USE [数据库名称]命令切换到要备份的数据库,然后执行备份命令即可。

关于Dtexec语句的编写,您可以参考以下示例:

dtexec /F "C:\SSIS\Package.dtsx" /SET "\Package.Variables[User::Variable1].Value";"Value1" /SET "\Package.Variables[User::Variable2].Value";"Value2"

其中,/F参数指定要运行的SSIS包的文件路径,/SET参数用于设置包变量的值。

要想通过DTEXEC执行导出的本地文件并保留目的数据库中的表,可以采用以下步骤:

  1. 创建一个名为package.dtsx的SSIS包,并在其中添加一个“数据流”任务。

  2. 在“数据流”任务中,使用源和目标数据源连接管理器来连接到您的源和目标数据库。

  3. 添加一个“SQL任务”组件,并将其配置为使用“Execute SQL Task”操作。该操作必须包含一条SQL语句,它将删除目标表(如果存在)并创建一个新的空表。例如:

IF OBJECT_ID('dbo.MyTable', 'U') IS NOT NULL
    DROP TABLE dbo.MyTable

CREATE TABLE dbo.MyTable (
    Column1 INT,
    Column2 VARCHAR(50)
)
  1. 添加另一个“数据流”任务,并从源表中选择要导出的列。将这些列映射到目标表的相应列。

  2. 将导出的数据保存到本地文件。

  3. 最后,在命令提示符下使用以下命令来运行SSIS程序包:

dtexec /f "C:\path\to\package.dtsx"

这将执行整个SSIS程序包,包括删除目标表和创建新的空表,然后将数据从源表导出到目标表中。

给你举个例子

2)将包导入SQL Server 2005再执行
在SQL Server 2005中打开Managemenet Studio,连接Integration Services服务,选择"已存储的包",击右键可将包导入"File System"或"MSDB"中,完成之后执行语句分别为
exec xp_cmdshell   'dtexec /DTS "/File System/Package1"'
exec xp_cmdshell   'dtexec /DTS "/MSDB/Package1"'


试下,路径换成你的真实路径

dtexec /FILE "D:\SSISPackages\YourPackage.dtsx" 
/CHECKPOINTING on 
/MAXCONCURRENT 4  
/LOGIN YourLogin 
/PASSWORD YourPassword   
/SERVER '.' 
/SET \Package.Variables[User::TestValue].Value='1'
/CONN "SourceServer" "Data Source=YourServerName"