使用.NET的SqlBulkCopy,在SQL Server 2008中,我需要给用户什么权限?
http://msdn.microsoft.com/en-us/library/ms162802.aspx
操作需要源表的 SELECT 权限。 bcp in 操作至少需要目标表的 SELECT/INSERT 权限。此外,如果以下任一条件成立,则需要 ALTER TABLE 权限:存在约束且未指定 CHECK_CONSTRAINTS 提示。 ms162802.note(en-us,SQL.100).gifNote: 禁用约束是默认行为。要显式启用约束,请使用带有 CHECK_CONSTRAINTS 提示的 -h 选项。
存在触发器且未指定 FIRE_TRIGGER 提示。 ms162802.note(en-us,SQL.100).gifNote: 默认情况下,不会触发触发器。要显式触发触发器,请使用带有 FIRE_TRIGGERS 提示的 -h 选项。
您使用 -E 选项从数据文件导入标识值。
注意: 在 SQL Server 2005 中,对目标表需要 ALTER TABLE 权限是新要求。如果用户账户缺少目标表的 ALTER table 权限,则此新要求可能导致未执行触发器和约束检查的 bcp 脚本失败。
从 .NET 中指定这些提示:
var bulkCopy = new SqlBulkCopy(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"],
SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.CheckConstraints);
只需要SELECT/INSERT权限,SqlBulkCopy类就可以成功执行。该类会对目标SQL Server表发出INSERT BULK语句。今天我们在其中一个开发服务器上验证了这一点。
BULK INSERT
的文档链接:https://learn.microsoft.com/zh-cn/sql/t-sql/statements/bulk-insert-transact-sql - Thymine有一个bulkadmin角色,允许使用BULK INSERT命令。http://msdn.microsoft.com/en-us/library/ms189934(SQL.90).aspx