IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

php - sqlsrv : set identity_insert [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Développeur
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut php - sqlsrv : set identity_insert
    Bonjour,

    Je travaille actuellement sur une application web PHP - SQL Server.
    J'utilise le driver sqlsrv (sqlsrv_connect, sqlsrv_query...) pour faire mes requetes sur ma base de données.

    Mon problème est le suivant : je me retrouve dans l'obligation de faire un INSERT sur un champs ayant un "Identity Specification".
    J'ai essayé en ajoutant l'instruction "SET IDENTITY_INSERT tableName ON" avant ma requête, mais il semblerait que cela ne fonctionne pas avec sqlsrv_query.

    Voici un exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql = "
    	SET IDENTITY_INSERT table_test ON
    	INSERT INTO table_test (id, test)	-- Le champs id est en Identity Specification
    	VALUES (42, 'test')
    	SET IDENTITY_INSERT table_test OFF
    ";
     
    sqlsrv_query($connexion, $sql);
    J'ai essayé la même requête (au caractère près) en utilisant le driver mssql (mssql_connect, mssql_query...), ça marche, mais on m'impose l'utilisation de sqlsrv.

    Quelqu'un aurait-il une solution?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu obtiens une erreur ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Profil pro
    Développeur
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Non ça ne m'affiche absolument aucune erreur, rien non plus dans la log d'erreur de php...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as bien utilisé sqlsrv_errors() ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Candidat au Club
    Profil pro
    Développeur
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Vous allez me trouver bête, je ne connaissais pas cette commande... Je travaille sur sql server depuis peu :/

    Effectivement, il y a une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    array
      0 => 
        array
          0 => string '42000' (length=5)
          'SQLSTATE' => string '42000' (length=5)
          1 => int 1088
          'code' => int 1088
          2 => string '[Microsoft][SQL Server Native Client 10.0][SQL Server]L'objet "table_test" est introuvable, car il n'existe pas ou vous ne disposez pas des autorisations requises.' (length=163)
          'message' => string '[Microsoft][SQL Server Native Client 10.0][SQL Server]L'objet "table_test" est introuvable, car il n'existe pas ou vous ne disposez pas des autorisations requises.' (length=163)
    Pourtant ma table existe, et il semble que j'ai les autorisations dessus puisque la requête fonctionne sans les SET IDENTITY_INSERT
    Faut-il une autorisation supplémentaire pour cette commande?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut peut être une désignation complète du genre
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SET IDENTITY_INSERT dbo.table_test ON  ...
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Candidat au Club
    Profil pro
    Développeur
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Non ça ne marche pas non plus...

    On m'avait également suggéré d'utiliser des "GO", comme ceci :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SET IDENTITY_INSERT dbo.table_test ON
    GO
     
    INSERT INTO table_test (id, test)
    VALUES (42, 'test')
    GO
     
    SET IDENTITY_INSERT dbo.table_test OFF
    GO

    Ou encore d'exécuter les SET IDENTITY_INSERT dans une autre requête en utilisant sqlsrv_execute, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sqlsrv_execute(sqlsrv_prepare($connexion, "SET IDENTITY_INSERT dbo.table_test ON"));
    sqlsrv_execute(sqlsrv_prepare($connexion, $sql, array(&$id, &$test)));
    sqlsrv_execute(sqlsrv_prepare($connexion, "SET IDENTITY_INSERT dbo.table_test OFF"));
    Rien ne marche...

  8. #8
    Candidat au Club
    Profil pro
    Développeur
    Inscrit en
    Décembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Décembre 2012
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Problème résolu, c'était effectivement un problème de droit... La commande demande d'avoir le droit ALTER sur la table, que je pensais avoir... En ajoutant ce droit, c'est OK...

    Je me sens bête... Merci pour l'aide en tout cas, et désolé de vous avoir fait perdre votre temps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 20/06/2012, 13h07
  2. SET IDENTITY_INSERT sur une base en exploitation ?
    Par azur668 dans le forum Développement
    Réponses: 2
    Dernier message: 21/07/2009, 15h29
  3. [DEBUTANT] Attribution de droit pour SET IDENTITY_INSERT
    Par duc@ti dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/01/2008, 11h23
  4. SET IDENTITY_INSERT ON/OFF sous Oracle 10g ?
    Par Najdar dans le forum Oracle
    Réponses: 1
    Dernier message: 31/08/2006, 15h05
  5. UPDATE * SET php/mysql
    Par Invité dans le forum Requêtes
    Réponses: 13
    Dernier message: 28/03/2006, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo