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

MS SQL Server Discussion :

Problème d'alter table dans une procédure stockée


Sujet :

MS SQL Server

  1. #1
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut Problème d'alter table dans une procédure stockée
    Bonjour

    J'ai une procédure stockée dans laquelle je crée une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE PROCEDURE [etape001_206] AS 
     
    if exists (select * from sysobjects where id = object_id(N'[dbo].[TABTRAV]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[TABTRAV];
     
    SELECT IDTABLE as idx,SACLIASSE=convert(char(20),''),NBADR=convert(int,0),VRAC=convert(int,0), CODE_REGROUP_206 as CODE, DEP=convert(char(6),SUBSTRING(CORRCP,1,2) + (case when patindex('PARIS %',CORRVILLE)<>0 then CENTRAL_PRESSE  when patindex('LYON %',CORRVILLE)<>0 then CENTRAL_PRESSE when patindex('MARSEILLE %',CORRVILLE)<>0 then CENTRAL_PRESSE ELSE '000' end)), CENTRAL_PRESSE as CENTRAL, COTE_TRI_PRESSE as COTE, SUBSTRING(CORRCP,3,3) as CP, SUBSTRING(ID_DISTRI,1,2) as SECTEUR, SUBSTRING(ID_DISTRI,3,2) as QUARTIER, NBLIASSE=Convert(int,0), TYPELIASSE=Convert(int,0) , TD=Convert(int,1) into TABTRAV FROM [tableent];
     
    ALTER TABLE [dbo].[TABTRAV] ALTER COLUMN idx int NOT NULL 
     
    ALTER TABLE [dbo].[TABTRAV] WITH NOCHECK ADD  CONSTRAINT [PK_TABTRAV] PRIMARY KEY  NONCLUSTERED ([idx])  ON [PRIMARY] ;
    GO
    Le problème c'est que quand je la lance j'ai quand même le message :
    Impossible de définir la contrainte PRIMARY KEY sur une colonne pouvant être NULL de la table 'TABTRAV'.
    malgré mon alter table qui passe la colonne à NOT NULL.

    J'ai fais le test avec une autre table (tableent) et si je fais l'alter table sur la colonne à NOT NULL en dehors de la procédure stockée, juste avant, je n'ai pas de problème avec l'alter table de la PRIMARY KEY. Par contre si je fais dedans ca ne marche pas non plus.

    Comment résoudre ce problème ?

    Merci !

  2. #2
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    t'as essayé en déclarant idx comme étant IDENTITY :
    Comme ça c'est automatiquement NOT NULL

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    1) N'oubliez pas le BEGIN et le END dans vos procédures stockées lançant plus d'une commande.
    2) Il n'est pas possible de passer de NULL à NOT NULL via un ALTER TABLE d'une table non-vide
    3) créez d'abord le DDL de votre table résultante avec les champs que vous souhaitez, puis préférez un INSERT SELECT au SELECT INTO. Attention : dès lors, il s'agit d'une transaction journalisée, contrairement au SELECT INTO.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  4. #4
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    ok je vais suivre tes conseils en espérant que cette fois ca marche
    par contre pour ton point 2), j'ai réussi à le faire sur une table non vide sachant que tous les enregistrements avaient une valeur dans la colonne que j'ai passé à not null

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. [ASE] Alter table dans une procédure stockée
    Par malignois dans le forum Adaptive Server Enterprise
    Réponses: 2
    Dernier message: 01/10/2009, 11h20
  3. Réponses: 2
    Dernier message: 03/03/2006, 13h41
  4. Problème Alter view dans une procédure stockée
    Par adjava dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/07/2005, 17h45
  5. Problème avec un LIKE dans une procédure stockée
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/12/2004, 14h38

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