SSIS截断表失败;从成功删除

时间:2019-02-01 16:56:20

标签: sql sql-server ssis etl execute-sql-task

我有一个SSIS程序包,我想在其中清除暂存表并重新填充它。我创建了TRUNCATE TABLE TABLE_NAME的执行SQL任务,失败并显示以下错误:

  

表不存在或您没有权限

如果我更改任务以执行DELETE FROM TABLE_NAME,则它的工作原理就像是一种魅力。如果我以要连接的用户身份登录并执行TRUNCATE TABLE TABLE_NAME,它也可以像超级按钮一样工作。谁能帮助我理解为什么我不能在SSIS作业中执行截断,但是我可以作为用户吗?因为,我宁愿截断表而不是删除表。

1 个答案:

答案 0 :(得分:0)

可以将错误分成两个部分:

  1. 表不存在
  2. 没有权限

所以,如果你确定表中存在的(正如你说,DELETE操作效果很好)的,它是一个权限问题,检查数据库管理员也许你没有权限从该表数据截

请注意的 TRUNCATE TABLE需要更多的权限,然后删除操作即可。基于the official documentation

  

所需的最低权限为table_name的ALTER。默认情况下,表所有者,sysadmin固定服务器角色的成员以及db_owner和db_ddladmin固定数据库角色的TRUNCATE TABLE权限是不可转让的。但是,您可以将TRUNCATE TABLE语句合并到模块(例如存储过程)中,并使用EXECUTE AS子句为模块授予适当的权限。

在另一方面,在 DELETE操作需要较少的权限即可。基于the official documentation

  目标表具有

DELETE权限。如果该语句包含WHERE子句,则还需要SELECT权限。

     

DELETE权限默认sysadmin固定服务器角色,是db_owner和db_datawriter固定数据库角色和表所有者的成员。 sysadmin,db_owner和db_securityadmin角色的成员以及表所有者可以将权限转移给其他用户。