HELP!!!!!!!!Problème Sql Server sous vb.net!!!!!!!!

HELP!!!!!!!!Problème Sql Server sous vb.net!!!!!!!! - SQL/NoSQL - Programmation

Marsh Posté le 05-08-2004 à 16:17:56    

Bonjour,
 
Je me trouve face à un problème que je n'arrive absolument pas à résoudre et qui commence à me rendre hystérique.
J'ai une base de donnée sql server avec une trois tables.
La premiere table est la table "personne" et les deux autres sont respectivement "client" et "fournisseur".
L'identifiant de la table personne est un numéro automatique.
Etant donné que les entités client et fournisseur sont des héritages de la table personne, leur identifiant est celui qui se trouve dans la table personne.
 
Le problème c'est que lorsque j'insère une occurence dans la table personne, il faut impérativement que je l'insère soit dans la table client, soit dans la table fournisseur mais étant donné que l'identifiant est généré de manière automatique, je ne sais pas lequel mettre dans la table hérité.
Je ne vois absoluement pas comment le récupérer.!!!!!!!!!!!
(je tiens à éviter une requête select sur les attributs de la personne nouvellement insérer pour des raisons d'homonymie)
 
 
a l'aide

Reply

Marsh Posté le 05-08-2004 à 16:17:56   

Reply

Marsh Posté le 05-08-2004 à 16:23:00    

Jeuneloup a écrit :


J'ai une base de donnée sql server avec une trois tables.
La premiere table est la table "personne" et les deux autres sont respectivement "client" et "fournisseur".
L'identifiant de la table personne est un numéro automatique.
Etant donné que les entités client et fournisseur sont des héritages de la table personne, leur identifiant est celui qui se trouve dans la table personne.


 
Tu as un "concept" d'heritage qui apparait sur le MCD donc, mais dans ta base cela aurait du se traduire par 2 tables 'Client' et 'fournisseurs ' heritant des attributs de personnes + ayant leurs attributs perso...
Enfin c'est comme ca que j'aurai fait ...


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 05-08-2004 à 16:25:00    

en sql server n 'y aurait i pas une fonction comme le last_insert_id() du couple php + mysql ?

Reply

Marsh Posté le 05-08-2004 à 16:26:12    

Bonjour,
 
C'est pas comme ça que je fais, sinon ça crée des redondances de données inutilement.

Reply

Marsh Posté le 05-08-2004 à 16:27:17    

Bonjour,
 
Je ne connais pas cette fonction last_insert_id(), peux-tu m'en dire plus?
 
merci.

Reply

Marsh Posté le 05-08-2004 à 16:29:34    

Jeuneloup a écrit :

Bonjour,
 
C'est pas comme ça que je fais, sinon ça crée des redondances de données inutilement.


 
Non, a moins qu'un de tes clients soit aussi ton fournisseur.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 05-08-2004 à 16:37:33    

Bonjour boulax,
 
C'est effectivement le cas.
 
Merci.

Reply

Marsh Posté le 05-08-2004 à 16:42:00    

Bonjour,
 
t'es un robot ?
 
merci, au revoir
 
Bon sans rire, regarde dans ta doc sql server ou dans celle de l'api avec laquelle tu fais tes requetes depuis un programme (si c'est le cas) et regarde si tu trouves la fonction last_insert_id ou un truc qui ressemble.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 05-08-2004 à 16:47:18    

Je pense être surtout poli avec les gens qui prennent le temps de me répondre.

Reply

Marsh Posté le 05-08-2004 à 17:51:03    

insert into fesse (pet) values ('prout')
select SCOPE_IDENTITY()
 
Cf l'aide de SQL Server comme l'a stipulé Boulax :
 

Citation :


 Référence de Transact-SQL  
 
 
SCOPE_IDENTITY
Renvoie la dernière valeur IDENTITY insérée dans une colonne IDENTITY dans la même étendue. Une étendue est un module, tel qu'une procédure stockée, un déclencheur, une fonction ou un lot. Ainsi, deux instructions sont dans la même étendue s'ils se trouvent dans la même procédure stockée ou fonction, ou dans le même lot.
 
Syntaxe
SCOPE_IDENTITY( )
 
Type des valeurs renvoyées
sql_variant
 
Notes
SCOPE_IDENTITY, IDENT_CURRENT et @@IDENTITY sont des fonctions similaires dans la mesure où elles renvoient les valeurs insérées dans les colonnes IDENTITY.  
 
IDENT_CURRENT n'est pas limitée au niveau de l'étendue et la session, car elle est restreinte à une table spécifiée. IDENT_CURRENT renvoie la valeur générée pour une table spécifique dans n'importe quelles session et étendue. Pour plus d'informations, voir IDENT_CURRENT.
 
SCOPE_IDENTITY et @@IDENTITY renvoient les dernières valeurs d'identité générées dans une table de la session en cours. Toutefois, SCOPE_IDENTITY renvoie les valeurs insérées uniquement dans l'étendue actuelle. @@IDENTITY n'est pas restreinte à une étendue spécifique.
 
Par exemple, vous disposez de deux tables (T1 et T2) et d'un déclencheur INSERT défini dans T1. Lorsqu'une ligne est insérée dans T1, le déclencheur s'active et insère une ligne dans T2. Ce scénario illustre deux étendues : insertion dans T1 et insertion dans T2 (action résultante du déclencheur).
 
Supposons que T1 et T2 incluent des colonnes IDENTITY : @@IDENTITY et SCOPE_IDENTITY renvoient des valeurs différentes à la fin d'une instruction INSERT dans T1.
 
@@IDENTITY renvoie la dernière valeur de la colonne IDENTITY insérée dans toute étendue au cours de la session actuelle, ce qui correspond à la valeur insérée dans T2.
 
SCOPE_IDENTITY() renvoie la valeur IDENTITY insérée dans T1, ce qui correspond à la dernière instruction INSERT exécutée dans la même étendue. La fonction SCOPE_IDENTITY() renvoie la valeur NULL si la fonction est invoquée avant que toute instruction INSERT dans une colonne d'identité ne soit exécutée dans l'étendue.
 
Les exemples suivants illustrent ce scénario.
 
Exemple
L'exemple suivant crée deux tables, TZ et TY, et place un déclencheur INSERT dans TZ. Lorsqu'une ligne est insérée dans la table TZ, le déclencheur (Ztrig) s'active et insère une ligne dans TY.
 
USE tempdb
GO
CREATE TABLE TZ (
   Z_id  int IDENTITY(1,1)PRIMARY KEY,
   Z_name varchar(20) NOT NULL)
 
INSERT TZ
   VALUES ('Lisa')
INSERT TZ
   VALUES ('Mike')
INSERT TZ
   VALUES ('Carla')
 
SELECT * FROM TZ
 
--Result set: This is how table TZ looks
Z_id   Z_name
-------------
1      Lisa
2      Mike
3      Carla
 
CREATE TABLE TY (
   Y_id  int IDENTITY(100,5)PRIMARY KEY,
   Y_name varchar(20) NULL)
 
INSERT TY (Y_name)
   VALUES ('boathouse')
INSERT TY (Y_name)
   VALUES ('rocks')
INSERT TY (Y_name)
   VALUES ('elevator')
 
SELECT * FROM TY
--Result set: This is how TY looks:
Y_id  Y_name
---------------
100   boathouse
105   rocks
110   elevator
 
/*Create the trigger that inserts a row in table TY  
when a row is inserted in table TZ*/
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT AS  
   BEGIN
   INSERT TY VALUES ('')
   END
 
/*FIRE the trigger and find out what identity values you get  
with the @@IDENTITY and SCOPE_IDENTITY functions*/
INSERT TZ VALUES ('Rosalie')
 
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT   @@IDENTITY AS [@@IDENTITY]
GO
 
--Here is the result set.
SCOPE_IDENTITY
4
/*SCOPE_IDENTITY returned the last identity value in the same scope, which was the insert on table TZ*/
 
@@IDENTITY
115
/*@@IDENTITY returned the last identity value inserted to TY by the trigger, which fired due to an earlier insert on TZ*/
 
 
Voir aussi
 
@@IDENTITY
 
©1988-2000 Microsoft Corporation. Tous droits réservés.


Message édité par Arjuna le 05-08-2004 à 17:58:03
Reply

Marsh Posté le 05-08-2004 à 17:51:03   

Reply

Marsh Posté le 05-08-2004 à 18:53:30    

Comme promis, je ne dis plus bonjour, ni merci en fin de message ;)
 
effectivement couplé avec les transactions cela résoud mon problème.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed