我有一个SSIS程序包,我想在其中清除暂存表并重新填充它。我创建了TRUNCATE TABLE TABLE_NAME
的执行SQL任务,失败并显示以下错误:
表不存在或您没有权限
如果我更改任务以执行DELETE FROM TABLE_NAME
,则它的工作原理就像是一种魅力。如果我以要连接的用户身份登录并执行TRUNCATE TABLE TABLE_NAME
,它也可以像超级按钮一样工作。谁能帮助我理解为什么我不能在SSIS作业中执行截断,但是我可以作为用户吗?因为,我宁愿截断表而不是删除表。
答案 0 :(得分:0)
可以将错误分成两个部分:
所以,如果你确定表中存在的(正如你说,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角色的成员以及表所有者可以将权限转移给其他用户。