我在sql中有两个数据表。我需要将一个表的数据插入到另一个表中。我的第一个数据表Table1包含数据列Code,Model,Num,Qty和第二个表Table2也包含相同的数据。但是我需要多次从table1到table2插入数据。如果Table1中的Qty为4,则插入
的数据表1根据数量进行4次。
protected void Button15_Click3(object sender, EventArgs e)
{
for (int i = 0; i < 4; i++)
{
String str1 = "insert into Table2(Code, Model, Num, Qty) select Code, Model, Num, Qty from Table1;";
SqlCommand xp1 = new SqlCommand(str1, con);
con.Open();
SqlDataAdapter da1 = new SqlDataAdapter();
da1.SelectCommand = xp1;
DataSet ds1 = new DataSet();
da1.Fill(ds1, "Code");
GridView1.DataSource = ds1;
con.Close();
}
}
}
在这个程序中,我手动给出了4号,但我需要从我的数据库qty
中取出它。如何在循环中将SQL列名称qty放在多个时间插入数据?
答案 0 :(得分:1)
您可以尝试这样:
private void button1_Click(object sender, EventArgs e)
{
string connetionString = null;
SqlConnection connection ;
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet ds = new DataSet();
int i = 0;
int j = 0;
connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password";
connection = new SqlConnection(connetionString);
try
{
connection.Open();
adapter.SelectCommand = new SqlCommand("Your SQL Statement Here", connection);
adapter.Fill(ds);
connection.Close();
for(j=0;j<=ds.Tables[0].Rows.Count;j++){
for (i = 0; i <= Convert.ToInt32(ds.Tables[0].Rows[j]["Qty"].ToString()); i++)
{
String str1 = "insert into Table2(Code, Model, Num, Qty)
select Code, Model, Num, Qty from Table1;";
SqlCommand xp1 = new SqlCommand(str1, con);
con.Open();
SqlDataAdapter da1 = new SqlDataAdapter();
da1.SelectCommand = xp1;
DataSet ds1 = new DataSet();
da1.Fill(ds1, "Code");
GridView1.DataSource = ds1;
con.Close();
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
我希望现在很清楚。 !
答案 1 :(得分:0)
正如评论中所指出的,在源表和目标表上没有主键的情况下复制行并不是一个好主意,否则行的识别将成为问题。
您还没有提到是要复制一行,多行还是整个表N次,但假设后者,这样的批量IO作业更适合在数据库服务器中执行整个操作,以减少IO在您的应用程序和数据库之间来回传输数据。
假设两个表都在同一个数据库中,这里可以通过行复制递归CTE来实现。如果您需要从C#控制@CopyCount
,只需将其绑定为整数并使用SqlCommand.ExecuteNonQuery
执行它:
DECLARE @CopyCount INT = 10;
with cteRowGen AS
(
SELECT 1 AS RowNum
UNION ALL
SELECT RowNum + 1
FROM cteRowGen
WHERE RowNum < @CopyCount
)
insert into Table2(Code,Model,Num,Qty)
select Code,Model,Num,Qty
from table1 CROSS JOIN cteRowGen;
答案 2 :(得分:0)
就像StuartLC所指出的那样,CTE是要走的路。
这是一个将从你的table1读取QTY的版本 它还将为表2中的数量插入1,而不是4
DECLARE @Cnt INT = (SELECT Qty FROM Table1);
WITH data AS (
SELECT 1 AS RowCnt
UNION ALL
SELECT RowCnt + 1
FROM data
WHERE RowCnt < @Cnt
)
INSERT INTO Table2
SELECT Code, Model, Num, 1 as Qty
FROM Table1 a
CROSS JOIN data