T-SQL - 在单个存储过程中,希望将一个查询的值(结果)作为输入传递给另一个查询

时间:2010-09-28 10:58:25

标签: sql-server sql-server-2005


我有一个存储过程,我必须一次在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

1 个答案:

答案 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;