web-dev-qa-db-fra.com

Vous n'êtes pas autorisé à utiliser l'erreur d'instruction de chargement en bloc

J'essaie d'insérer une image dans une colonne VARBINARY (MAX). Je reçois cette erreur: 

Vous n'êtes pas autorisé à utiliser l'instruction de chargement en bloc.

Voici mon code:

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

Je me rends compte qu'il y a beaucoup de réponses à ce sujet mais aucune d'entre elles n'a fonctionné pour moi. Cette réponse serait la plus facile à suivre, mais lors de l'utilisation de l'explorateur d'objets et de l'accès à la sécurité> connexions> clic droit sur mon utilisateur, un élément de menu "Propriétés" ne s'affiche pas.

J'utilise Sql Server Management Studio. Je n'utilise peut-être pas la version de SQL Server que je pense, car aucune des méthodes de programmation permettant de définir les autorisations pour mon utilisateur n'a fonctionné. Je pense utiliser SQL Server 2012. J'ai probablement quelques versions de SQL Server sur mon ordinateur. En cliquant sur Aide> À propos de, le logo "Microsoft SQL Server 2012" apparaît au-dessus des informations de version de divers composants (il n'affiche pas les informations de version de SQL Server ici).

EDIT: Quelqu'un pourrait-il indiquer le code exact que j'utiliserais au-dessus de mon instruction insert, étant donné que la base de données s'appelle MirrorMirror, que le tableau s'appelle Stickers, mon utilisateur s'appelle Amber et mon serveur s'appelle gonskh1ou0.database.windows .net.

6
BeniaminoBaggins

Pour vous assurer que vous disposez des autorisations nécessaires pour utiliser les commandes BULK, suivez les instructions ci-dessous.

  • Développer Sécurité
  • Développer connexions
  • Faites un clic droit sur votre nom d'utilisateur et choisissez propriétés _ .__ (une fenêtre de dialogue apparaît)
  • Choisissez Rôles du serveur
  • Sélectionnez bulkadmin} pour pouvoir utiliser les commandes en bloc ou sysadmin pour pouvoir utiliser les commandes de votre base de données.

En ce qui concerne la requête que vous utilisez, elle n’est pas tout à fait correcte.

Pour créer la table

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

Pour insérer les données de grande valeur

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]

Quelques notes:

  • Vous devez définir un nom de corrélation pour le jeu de lignes en bloc après la clause FROM ([photo]).
  • Utilisez le préfixe de colonne de droite utilisé pour la corrélation de l'ensemble de lignes en bloc (photo. *)
  • La colonne pour l'insertion en bloc doit être définie sur varchar (max)

Article MSDN pour cela: ici

13
sixech0
ALTER SERVER ROLE [bulkadmin] ADD MEMBER [user]
1
Raja Govindan