2013-07-07 2 views
4

Я учу себя SQL Server как немного хобби. Я застрял с вставкой данных в реляционные таблицы, я понимаю идеи реляционных таблиц.Как вставить в реляционные таблицы

Мне было интересно, может ли кто-нибудь сказать мне, как я могу получить личность ранее вставленной строки, хранить ее как переменную, которая будет использоваться как FK в остальных запросах.

Вот мой 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 

примеры, которые я видел в Интернете, кажется, делают это так, но я получаю типичный зашифрованное сообщение об ошибке от VS

(76,1): SQL72014: .Net Поставщик данных SqlClient: Msg 207, уровень 16, состояние 1, процедура q_insertuser, строка 19 Недопустимое имя столбца 'userid'.
Произошла ошибка во время выполнения партии.

Однако имя столбца userid представляет собой таблицу, которую я запрашиваю.

ответ

5

заменить эту часть

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

с этим

DECLARE @UID INT 
SET @UID = SCOPE_IDENTITY() 

Вы можете назначить функцию SCOPE_IDENTITY() непосредственно в переменную, так же, как GETDATE() или db_name().

+0

Другим способом является использование предложения 'OUTPUT'. – a1ex07

+0

Спасибо, что отлично работали. – Qu1nncunxIV

Смежные вопросы