C# 对于表中的每一行,返回包含值+21的所有行(使用SQL)
这似乎很容易,但我在这里被绊倒了。我使用的是VS2010,C环境 所以,基本上,我们有一个包含大量表的数据库。此表包含“质量值类型为双精度”的列。对于每一行,我必须找到质量等于特定行中质量值加21的所有记录。并将这些结果记录放入同一数据库中的现有表中C# 对于表中的每一行,返回包含值+21的所有行(使用SQL),c#,sql,C#,Sql,这似乎很容易,但我在这里被绊倒了。我使用的是VS2010,C环境 所以,基本上,我们有一个包含大量表的数据库。此表包含“质量值类型为双精度”的列。对于每一行,我必须找到质量等于特定行中质量值加21的所有记录。并将这些结果记录放入同一数据库中的现有表中 这可以由SQL完成,还是我必须使用迭代来完成?您可以使用in语句来完成 INSERT INTO SomeOtherTable (<columns you want>) SELECT <columns you want> FR
这可以由SQL完成,还是我必须使用迭代来完成?您可以使用in语句来完成
INSERT INTO SomeOtherTable (<columns you want>)
SELECT <columns you want>
FROM Masses
WHERE Mass IN (SELECT mass + 21
FROM masses)
或使用派生表:
INSERT INTO SomeOtherTable (<columns you want>)
SELECT <columns you want>
FROM Masses
INNER JOIN (SELECT Mass + 21 AS NewMass
FROM masses) AS NewMasses
ON NewMasses.NewMass = Masses.Mass
您可以使用游标在表中进行迭代。 游标可以将行中列的值分配给SQL变量。 然后对每一行进行过滤,然后根据结果进行任何处理
-- Create a cursor that iterates through the table and only reads the 'mass' column
DECLARE C1 CURSOR FOR
SELECT mass FROM masses
DECLARE @current decimal
OPEN C1
-- Copy the value from the 'mass' column to a vaiable
FETCH NEXT FROM C1 INTO @current
WHILE @@fetch_status = 0
BEGIN
-- Select the rows that have mass = current row mass + 21
SELECT * -- This ca be improved by selecting only the rows you need
FROM masses
WHERE mass = @current + 21
FETCH NEXT FROM C1 INTO @current
END
CLOSE C1
DEALLOCATE C1
在嵌套选择中,您可以将所有行复制到目标表中,例如,通过更改以下行:
INSERT INTO DESTINATION_TABLE(row1, row2, ..., rown)
SELECT (row1, row2, ..., rown)
FROM masses
WHERE mass = @current + 21
为了说清楚。。。你打算在哪里为每一行做准备?C端还是SQL端???是的,使用纯SQL很容易做到,这里有一些例子:我使用了foreach row方法,我会在几分钟内发布代码。@JosipMiller根据经验,很少需要通过迭代逐行执行任何操作-这不是数据库的设计目的!谢谢你的提示我想还有更多的SQL需要学习。我没有尝试使用Declare关键字,但我会的。谢谢这意味着我们必须为表中的每条记录建立+21的值。@JosipMiller请进一步解释。是否要更新每条记录,将21条添加到每个质量中?表质量中没有更新。我们需要在表mass中搜索每行的值mass+21。例如,如果第2行中的质量=22,则我们在表中搜索质量值为43的行。我们为每一行都这样做。之后,我们将找到的记录放入现有的表中。这看起来非常优雅,谢谢在同一个应用程序中,我已经使用连接来搜索数据,但是现在我没有考虑这个方法。在我看来,这可能是解决问题的办法。好的,我会尝试一下,然后回复给你。谢谢你的回答。我必须研究一下这个方法,但看起来可能会有帮助。不客气。我会对代码多加一点注释,让它更容易理解。哇!用一把大锤敲开这里的螺母。这个问题可以用一些简单的SQL来解决。
INSERT INTO DESTINATION_TABLE(row1, row2, ..., rown)
SELECT (row1, row2, ..., rown)
FROM masses
WHERE mass = @current + 21