Sql-сервер Хранимая Процедура - PullRequest
1 голос
/ 05 апреля 2010

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

Table A:
pk_id int,
user varchar

Table B:
userKey int
locationKey int    
Someotherthings varchar

Table C:
pk_id int,
Location varchar

Когда я вызываю sp_howto и передаю ему пользователя, я хочу, чтобы он получил pk_id из таблицы A и вставил его в таблицу B userKey.

set @res = select pk_id from TableA where user=@user
set @loc = select pk_id from TableC where location = @Location
insert into tableB (userKey, locationKey) values (@res, @loc)

Это работает? и что, если у меня много переменных, которые я хочу заполнить следующим образом?

Ответы [ 3 ]

4 голосов
/ 05 апреля 2010

Более краткий синтаксис - использовать что-то вроде этого:

INSERT INTO TableB (UserKey)
SELECT UserKey FROM TableA WHERE User = @User
2 голосов
/ 05 апреля 2010

Это должно работать для одной или нескольких клавиш

insert into tableB (userKey) 
select  userKey from TableA where user=@user
1 голос
/ 06 апреля 2010

Вопрос видоизменился - опубликованный код работает нормально, это альтернативы.

Способ с одним утверждением, в котором вы передаете два параметра, @User и @Location:

INSERT INTO TableB (UserKey, LocationKey)
SELECT (userKey, LocationKey) 
FROM
(
    (select pk_id as userKey, user from TableA) x
    cross join 
    (select pk_id as LocationKey, Location from TableC) y
    WHERE user = @user and location = @location
)

Если пользователь уникален в таблице A, а местоположение уникально в таблице C, будет вставлена ​​одна запись в таблицу B.

Отредактировано для добавления:

Выше будет делать это в одном утверждении, но дополнительная сложность ничего не дает.Лучше сделать это так:

Добавьте уникальный ключ в TableB:

pk_id int IDENTITY

Затем сделайте вставку следующим образом:

declare @newID int

INSERT INTO TableB (UserKey)
SELECT pk_id from TableA where user = @user

SELECT @newID = SCOPE_IDENTITY() -- retrieves the new key value

UPDATE TableB set LocationKey = 
    (SELECT pk_id from TableC WHERE location = @location)
WHERE pk_id = @newID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...