插入行并增加字段中的值
Posted
技术标签:
【中文标题】插入行并增加字段中的值【英文标题】:insert rows and increase a value in a field 【发布时间】:2015-06-24 07:13:13 【问题描述】:我在从一个表插入到另一个表时遇到问题: 我想从另一个表中插入多行,并在插入时增加目标表中 int 字段的值。 代码是这样的:
Dim sqlCmd As New SqlClient.SqlCommand()
Dim conMain As New SqlClient.SqlConnection()
Dim strSQL As String =
"INSERT INTO AvizeCorn
(Seria, DataMAx, NrAviz, Agent, Școala, Data,
Buc, ZileLivrare, Luna, Produs, Anul)
SELECT @Seria, @Data+Zile as DataMax, @NrAviz, Agent, Școala, @Data, Zile*BucSt as Buc,
Zile as ZileLivrare, @Luna, @Produs,@Anul
FROM AgențiȘcoliCorn"
Try
conMain.ConnectionString = "Data Source=cristib\sqlexpress;Initial Catalog=Avize Măr și Corn;Integrated Security=True"
sqlCmd.Connection = conMain
conMain.Open()
sqlCmd.CommandType = CommandType.Text
sqlCmd.CommandText = strSQL
With sqlCmd.Parameters
.AddWithValue("@Seria", "AGP")
.AddWithValue("@NrAviz", DataSetCorn.AvizeCorn.Compute("Max(NrAviz)", "") + 1)
.AddWithValue("@Data", Convert.ToDateTime(DataCorn.Text))
.AddWithValue("@Luna", MonthName(Month(DataCorn.Text)))
.AddWithValue("@Produs", Produs.Text)
.AddWithValue("@Anul", Year(DataCorn.Text))
End With
sqlCmd.ExecuteNonQuery()
conMain.Close()
MsgBox("Avizele au fost create cu succes.")
Catch ex As Exception
MsgBox(ex.Message)
End Try
我的问题是NrAviz
我想检查最大值并为表中插入的每一行增加 1。 使用我的代码,它为表中插入的每个新行插入相同的值。
请帮忙,因为我是 sql 和 vb.net 的新手
【问题讨论】:
表格中有多少行 您最好使用 IDENTITY 或 SEQUENCE。计算这样的序列 a) 可能无法在多用户环境中工作,并且 b) 将是资源密集型的。你需要它做什么? 在这个新表中,我需要增加一个字段 (NrAviz),因为它就像一个 ID 字段。但我需要它与我的表中已经存在的 ID 字段不同,它是身份。序列呢?怎么用? 【参考方案1】:您可以将Max(NrAviz)
放入正在获取记录以插入它们的 SELECT 中。你可以使用ROW_NUMBER
Dim sqlCmd As New SqlClient.SqlCommand()
Dim conMain As New SqlClient.SqlConnection()
Try
conMain.ConnectionString = "Data Source=cristib\sqlexpress;Initial Catalog=Avize Măr și Corn;Integrated Security=True"
sqlCmd.Connection = conMain
conMain.Open()
sqlCmd.CommandType = CommandType.Text
sqlCmd.CommandText = strSQL
Dim strSQL As String = "INSERT INTO AvizeCorn (Seria, DataMAx, NrAviz, Agent, Școala, Data,
Buc, ZileLivrare, Luna, Produs, Anul)
SELECT @Seria, @Data+Zile as DataMax, (SELECT MAX(NrAviz) from AvizeCorn) + row_number() over (order by ID), Agent, Școala, @Data, Zile*BucSt as Buc,
Zile as ZileLivrare, @Luna, @Produs,@Anul
FROM AgențiȘcoliCorn"
sqlCmd.CommandText = strSQL
With sqlCmd.Parameters
.AddWithValue("@Seria", "AGP")
.AddWithValue("@Data", Convert.ToDateTime(DataCorn.Text))
.AddWithValue("@Luna", MonthName(Month(DataCorn.Text)))
.AddWithValue("@Produs", Produs.Text)
.AddWithValue("@Anul", Year(DataCorn.Text))
End With
sqlCmd.ExecuteNonQuery()
conMain.Close()
MsgBox("Avizele au fost create cu succes.")
Catch ex As Exception
MsgBox(ex.Message)
End Try
编辑
你也可以试试
INSERT INTO AvizeCorn (Seria, DataMAx, NrAviz, Agent, Școala, Data, Buc, ZileLivrare, Luna, Produs, Anul)
SELECT @Seria, @Data+Zile as DataMax, MAX(NrAviz)+1 FROM AvizeCorn, Agent, Școala, @Data, Zile*BucSt as Buc, Zile as ZileLivrare, @Luna, @Produs,@Anul
FROM AgențiȘcoliCorn
【讨论】:
更好的方法......但现在它说“无效的列名“NrAviz”。 那么NrAviz
不是AgențiȘcoliCorn
表上的列。 Nraviz
列所属的表名是什么?是AvizeCorn
吗?
AvizeCorn。好的。我确实修改了它,但现在我在开始时的位置。它插入 2 行具有相同的 NRAviz 值。最大+1。不会增加下一行的值。
我已经更新了从AvizeCorn
表中检索Max(NrAviz)
的答案
插入第一行后如何重新查询最大值然后加1?以上是关于插入行并增加字段中的值的主要内容,如果未能解决你的问题,请参考以下文章