【问题标题】:You do not have permission to use the bulk load statement error您无权使用批量加载语句错误
【发布时间】:2015-09-05 21:19:14
【问题描述】:

我正在尝试将图像插入 VARBINARY(MAX) 列。我收到此错误:

您没有使用批量加载语句的权限。

这是我的代码:

INSERT INTO Stickers (Name, Category, Gender, ImageData)
       SELECT   
           'Red Dress',
           'Dress',
           'F',
           BulkColumn FROM OPENROWSET(Bulk '\\Mac\Home\Documents\MMImages\reddress.png', 
                                      SINGLE_BLOB) AS BLOB

我意识到关于这个主题有很多答案,但没有一个对我有用。 This answer 对我来说是最容易理解的,但是当使用对象资源管理器并进入安全 > 登录 > 右键单击​​我的用户时,不会显示要进入的“属性”菜单项。

我正在使用 Sql Server Management Studio。也许我没有使用我认为的 SQL Server 版本,因为为我的用户设置权限的编程方法都不起作用。我想我正在使用 SQL Server 2012。我的计算机上可能有几个版本的 SQL Server。点击Help > About,在各个组件的版本信息上方确实显示了“Microsoft SQL Server 2012”的标志(这里没有显示SQL Server的版本信息)。

编辑:也许有人可以在我的插入语句上方说明我将使用的确切代码,假设数据库称为 MirrorMirror,表称为 Stickers,我的用户称为 Amber,我的服务器称为 gonskh1ou0 .database.windows.net。

【问题讨论】:

    标签: sql-server ssms


    【解决方案1】:

    为确保您拥有使用 BULK 命令的正确权限,请按照以下步骤操作

    • 展开安全
    • 展开登录
    • 右键单击您的用户名并选择属性 (出现一个对话窗口)
    • 选择服务器角色
    • 选择 bulkadmin 可以使用批量命令或选择 sysadmin 可以对您的数据库使用任何命令。

    现在,关于您使用的查询不太正确。

    用于创建表

    CREATE TABLE [dbo].[Stickers] (
            [name] varchar(10)
            , [category] varchar(10)
            , [gender] varchar(1)
            , [imageData] varchar(max)
    )
    

    用于插入大值数据

    INSERT INTO  [dbo].[Stickers] ([name], [category], [gender], [imageData])
    SELECT 'Red dress'
            , 'Dress'
            , 'F'
            , photo.*
    FROM OPENROWSET(BULK 'C:\Users\username\Desktop\misc-flower-png-55d7744aca416.png', SINGLE_BLOB) [photo]
    

    几点说明:

    • 您需要在 FROM 子句 ([photo]) 之后为批量行集设置关联名称
    • 使用已用于批量行集关联的右列前缀 (photo.*)
    • 批量插入的列需要设置为varchar(max)

    对此的 MSDN 文章:here

    【讨论】:

    • 谢谢。当我右键单击我的用户名时,为什么属性不显示为单击选项?
    • @user3935156 - 您必须使用管理帐户连接到服务器或联系您的管理员才能对任何用户名进行任何类型的服务器安全更改。
    • 我是管理员。我想我一定不是,所以我验证了我在服务器的 Microsoft Azure 页面中。
    【解决方案2】:
    ALTER SERVER ROLE [bulkadmin] ADD MEMBER [user]
    

    【讨论】:

    • 我还必须在目标表上授予更改权限
    【解决方案3】:

    可能需要

    ALTER ROLE [sysadmin] ADD MEMBER [user]
    

    例如 - 在当前 Linux 版本的 SQL Server 中,bulkadmin 角色不受支持,需要使用系统管理员来 BULK INSERT。这是 SQL Server https://github.com/MicrosoftDocs/sql-docs/issues/4198 的一个已知问题 - Linux 上的 SQL Server 的权限和角色不够精细。

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多