2013-07-07 4 views
4

Je m'apprends à SQL Server comme un passe-temps. Je suis coincé avec l'insertion de données dans des tables relationnelles, je comprends les idées des tables relationnelles. Je me demandais si quelqu'un pouvait me dire comment je peux obtenir l'identité de la ligne précédemment insérée, la stocker en tant que variable à utiliser comme FK dans les requêtes restantes.Comment insérer dans des tables relationnelles

Voici mon code TSQL:

CREATE PROCEDURE [dbo].[q_insertuser] 
@username varchar(50), 
@hash varchar(MAX), 
@name varchar(50), 
@email varchar(MAX), 
@address varchar(MAX), 
@city varchar(50), 
@postcode varchar(50) 

AS 
--INSERT USERNAME 
    INSERT INTO tab_user 
    (username) 
    VALUES 
    (@username) 

    --Selects the Userid to be used 
DECLARE @UID INT 
SET @UID = INT FOR SELECT * 
        FROM tab_user 
        WHERE (userid = SCOPE_IDENTITY()) 

--INSERT PASSWORD 
    INSERT INTO tab_pass 
    (userid, hash) 
    VALUES 
    (@UID ,@hash) 

--INSERT Address 
    INSERT INTO tab_contact 
    (userid,name, email, address, city, postcode) 
    VALUES 
    (@UID ,@name, @email, @address, @city, @postcode) 
--RETURN 0 

Les exemples que j'ai vu en ligne semblent être ce faire de cette façon, mais je reçois une erreur cryptique typique de VS

(76,1): SQL72014: fournisseur de données SqlClient .Net: Msg 207, niveau 16, état 1, procédure q_insertuser, ligne 19 Nom de colonne non valide "ID utilisateur".
Une erreur s'est produite lors de l'exécution du lot. Toutefois, le nom de la colonne userid est la table que j'interroge.

Répondre

5

cette partie remplacer

DECLARE @UID INT 
SET @UID = INT FOR SELECT * 
        FROM tab_user 
        WHERE (userid = SCOPE_IDENTITY()) 

avec ce

DECLARE @UID INT 
SET @UID = SCOPE_IDENTITY() 

Vous pouvez assigner la fonction SCOPE_IDENTITY() directement à une variable, tout comme getdate() ou db_name().

+0

Une autre méthode consiste à utiliser la clause 'OUTPUT'. – a1ex07

+0

Merci qui a parfaitement fonctionné. – Qu1nncunxIV

Questions connexes