2010-04-05 202 views
1

我將一個變量傳遞給存儲過程,我希望proc查看另一個表並獲取表的主鍵並將該值插入表中。Sql server存儲過程

Table A: 
pk_id int, 
user varchar 

Table B: 
userKey int 
locationKey int  
Someotherthings varchar 

Table C: 
pk_id int, 
Location varchar 

當調用sp_howto,並通過用戶給它,我想它得到表A中pk_id並將其插入到表B中USERKEY。

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

工作的呢?和如果我有很多變量我想要這樣填充?

+0

目前尚不清楚你所說的「很多關鍵點」的意思是什麼你的意思是你想爲許多對錶做這個? – egrunin 2010-04-05 19:40:44

+0

我編輯了這個問題。 – DarthVader 2010-04-05 19:49:42

+0

我編輯了我的答案。 – egrunin 2010-04-05 21:56:33

回答

1

問題已經變異了一些 - 目前發佈的代碼工作正常,這些都是替代品。

的一個語句的方式,在那裏你傳遞兩個參數,@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 
) 

如果用戶是否是TableA中獨一無二的,地點是在表C獨一無二的,這將插入一條記錄到TableB中。

編輯補充:

上面會做它在一個單一的聲明,但增加的複雜性獲得你什麼。更好地做到這一點是這樣的:

添加唯一密鑰表B:

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 
+0

我的方法有什麼問題,我還沒有嘗試過,但它會工作嗎? – DarthVader 2010-04-06 02:02:36

+0

是的 - 我以爲你在尋找替代品。 – egrunin 2010-04-06 02:23:05

+0

很酷。謝謝... – DarthVader 2010-04-06 23:21:21

4

更簡潔的語法就是用這樣的工作:

INSERT INTO TableB (UserKey) 
SELECT UserKey FROM TableA WHERE User = @User