2013-08-02 64 views
-2

这是我的第一个表While循环存储过程

表1

CatID TenderNumber 
    1  AA01012013 
    2  AA01012013 
    3  AA01012013 

表2

SubCatID CatID 
1   1 
2   1 
3   2 
4   2 
5   2 
6   3 

所以这是我的数据库看起来像。现在我想使用C#SubCatIDCatID存储到新表中。这些值将从TenderNumber仅作如下检索:

Select CatID from Table1 where TenderNumber='AA01012013' 

while(SQLDataReader1.read()) 
{ 
     select SubCatID from Table2 where CatID=Reader1["CatID"] 
     While(SQLDataReader2.read()) 
     { 
       insert into Table3(SubCatID,CatID)Values(Reader2["SubCatID"],Reader1["CatID"]) 
     } 
} 

我怎样才能做到这一点使用存储过程?

+0

我想在C#中使用存储过程执行此操作 – punter

+2

@punter **为什么要在C#中执行此操作?或者用'while'循环?甚至是存储过程?这只是一个单行的基于set的'insert'语句,不是? –

+0

@MarcGravell这只是我实际需求的一个示例。 – punter

回答

2

如何像

INSERT INTO Table3 
SELECT t2.SubCatID, 
     t2.CatID 
FROm Table1 t1 INNER JOIN 
     Table2 t2 ON t1.CatID = t2.CatID 
WHERE t1.TenderNumber='AA01012013' 

甚至使用参数,像

DECLARE @TenderNumber VARCHAR(50) = 'AA01012013' 

INSERT INTO Table3 
SELECT t2.SubCatID, 
     t2.CatID 
FROm Table1 t1 INNER JOIN 
     Table2 t2 ON t1.CatID = t2.CatID 
WHERE [email protected] 
0

在你的数据库中创建一个存储过程(对身体我用从@astander代码:)):

CREATE PROCEDURE dbo.p_InsertTenderInfo_byTenderNumber @TenderNumber VARCHAR(50) 
AS 
BEGIN 
    INSERT INTO Table3 
    SELECT t2.SubCatID, 
      t2.CatID 
    FROm Table1 t1 INNER JOIN 
      Table2 t2 ON t1.CatID = t2.CatID 
    WHERE [email protected] 
END 

而在你的C#代码:

using (var conection = new SqlConnection("conString")) 
{ 
    using (var command = new SqlCommand()) 
    { 
     command.Connection = conection; 
     command.CommandType = System.Data.CommandType.StoredProcedure; 
     command.CommandText = "dbo.p_InsertTenderInfo_byTenderNumber"; 
     command.Parameters.Add(new SqlParameter("@TenderNumber", "AA01012013")); 
     conection.Open(); 
     command.ExecuteNonQuery(); 
     conection.Close(); 
    } 
}