[英]How to call a FK value that is a PK value in another table for SQL server procedures
我有2個程序: usp_inserterpartner
和usp_insertlocation
。
usp_insertpartner
調用時, usp_insertpartner
插入一行名為TradingPartnerPK
的行。
usp_insertlocation
插入一行,其中LocationPK
為PK, TradingPartnerFK
為FK。
在這種情況下,如何執行usp_insertlocation @TradingPartnerFK = the TradingPartnerPK
?
我目前的代碼如下:
CREATE PROCEDURE usp_insertLocation
@LocationPK int,
@TradingPartnerFK int,
@Account varchar (255),
@Region varchar (255)
AS
BEGIN
SELECT @TradingPartnerFK = Trading_Partner.
INSERT INTO Location (LocationPK,TradingPartnerFK,Account,Region)
VALUES (@LocationPK,@TradingPartnerFK,@Account,@Region)
END
exec usp_insertLocation 1, @TradingPartnerFK = ??????????, 'Nike', 'Americas'
謝謝!!
SCOPE_IDENTITY()
將返回為當前作用域中的最后一個語句創建的最新標識。
更多信息請訪問: http : //msdn.microsoft.com/fr-fr/library/ms190315(v = sql.100).aspx
你能夠使用它的方式實際上取決於你如何進行插入。
如果你在第一個StoredProcedure中,並按照我之前的說法使用SCOPE_IDENTITY()
:
由於您無法在exec
命令中使用函數,因此您必須執行以下操作:
declare @fkid int
set @fkid = SCOPE_IDENTITY()
exec usp_insertLocation 1, @TradingPartnerFK = @fkid, 'Nike', 'Americas'
如果從外部過程調用第二個過程,例如:
exec usp_insertpartner [...]
exec usp_insertlocation [...]
您必須使用@@identity
因為您不在初始范圍內。
所以你的電話會是這樣的:
exec usp_insertLocation 1, @TradingPartnerFK = @@identity, 'Nike', 'Americas'
使用帶有identity columns
的scope_identity()
作為主鍵示例:
MS SQL Server 2008架構設置 :
create table TradingPartner (
PartnerPK int not null identity(1,1) primary key,
SomePartnerData varchar(100)
)
create table Location(
LocationPK int not null identity(1,1) primary key,
TradingPartnerFK int not null,
SomeLocationData varchar(100),
foreign key (TradingPartnerFK) references TradingPartner (PartnerPK)
)
go
create procedure usp_insert_partner
@SomePartnerData varchar(100)
as
begin
declare @PartnerPK int
insert TradingPartner (SomePartnerData) values (@SomePartnerData)
set @PartnerPK = scope_identity()
return @PartnerPK
end
go
create procedure usp_insert_location
@TradingPartnerPK int,
@SomeLocationData varchar(100)
as
begin
declare @LocationPK int
insert Location (TradingPartnerFK, SomeLocationData)
values (@TradingPartnerPK, @SomeLocationData)
set @LocationPK = scope_identity()
return @LocationPK
end
查詢1 :
declare @PartnerPK int
exec @PartnerPK = usp_insert_partner 'Some Partner 1'
exec usp_insert_location @PartnerPK, 'Some Location 1'
exec @PartnerPK = usp_insert_partner 'Some Partner 2'
exec usp_insert_location @PartnerPK, 'Some Location 2'
select *
from Location l
join TradingPartner p on l.TradingPartnerFK = p.PartnerPK
結果 :
| LOCATIONPK | TRADINGPARTNERFK | SOMELOCATIONDATA | PARTNERPK | SOMEPARTNERDATA |
----------------------------------------------------------------------------------
| 5 | 4 | Some Location 1 | 4 | Some Partner 1 |
| 6 | 5 | Some Location 2 | 5 | Some Partner 2 |
如果您在單獨的SP中執行此操作,則usp_inserterpartner應在執行insert語句或使用輸出參數保存此值后返回Scope_Identity()值(伙伴的PK)。
然后,當您執行位置sp時,PK值可用作usp_inserterpartner的返回值或其中一個輸出參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.