我有一个存储过程,我必须一次在3个不同的表中插入3个字符串,每个字符串分别插入3个表中。
在每个表中,在插入值时将生成唯一的主键(rowid)
现在,前两个表的主键是第三个表的外键,众所周知,它不应该为空。
在我的SP中,成功完成了值的插入和RowID(PrimaryKey)的生成 现在我必须将两个主键(Rowids)作为值/参数(foreignkeys)传递给第三个表,该表返回null。
这是我的SP: -
(1st Table)
INSERT INTO [kk_admin].[FA_Master](FA_Name,FA_CSession,FA_MSession) Values
(@FA_Name,@Session_Id,@Session_Id)
SELECT @**FA_ID=FA_ID** FROM [kk_admin].[FA_Master] where FA_Name=@FA_Name
(2nd Table)
INSERT INTO [kk_admin].[Dept_Master](Dept_Name,Dept_CSession,Dept_MSession) Values
(@Dept_Name,@Session_Id,@Session_Id)
SELECT @**Dept_id=Dept_id** from [kk_admin].[Dept_Master] where Dept_Name=@Dept_Name
(3rd Table)
INSERT INTO [kk_admin].[Category_Master] (**FA_Id**,**Dept_Id**,Category_Name,Category_CSession,Category_MSession) Values (@**FA_ID**,@**Dept_Id**,@Category_Name,@Session_Id,@Session_Id)
希望每个人都明白我所解释的内容。
Plz帮助我,
我没时间了。
Plz帮助我。
提前谢谢你,
Brightsy
答案 0 :(得分:0)
您可以使用OUTPUT
子句(假设您使用的是SQL Server 2005)来捕获前两个查询所插入的两行的主键。您可以将值捕获到临时表中。 [我之前写过你可以使用常规变量,但不支持。]示例代码:
CREATE TABLE #FA_Master_ID ( ID int );
CREATE TABLE #Dept_Master_ID ( ID int );
INSERT kk_admin.FA_Master ( FA_Name, FA_CSession, FA_MSession )
OUTPUT INSERTED.ID INTO #FA_Master_ID
VALUES ( @FA_Name, @Session_Id, @Session_Id );
INSERT kk_admin.Dept_Master ( Dept_Name, Dept_CSession, Dept_MSession )
OUTPUT INSERTED.ID INTO #Dept_Master_ID
VALUES ( @Dept_Name, @Session_Id, @Session_Id );
INSERT kk_admin.Category_Master ( **FA_Id**, **Dept_Id**, Category_Name, Category_CSession, Category_MSession )
SELECT **FA_Id** = ( SELECT TOP 1 ID FROM #FA_Master_ID ),
**Dept_Id** = ( SELECT TOP 1 ID FROM #Dept_Master_ID ),
Category_Name = @Category_Name,
Category_CSession = @Session_Id,
Category_MSession = @Session_Id;