我目前面临的问题是,我必须循环遍历给定表的所有行,处理该行中列的值,并将处理后的结果与该行中的更多数据保存到新表中。
我的问题是我对那种sql语句并不那么坚定。任何人都可以给我一些tipps或流行语来使用吗?
也许某些伪代码(c#)会帮助您理解我的问题
$message->from('some.email@here.com', 'Put Your Name Here');
所以我想要实现的是一个新表,其中每行的处理值和来自该行的一些原始数据
答案 0 :(得分:0)
通常,您希望在sql中搜索逐行语句(搜索RBAR),而是执行set操作。尝试类似:
Insert Into ResultTable (
column1,
column2,
processedValue)
select
ot.column1,
ot.column2,
yourFunction(ot.column3) AS ProcessedValue
from
originalTable ot
答案 1 :(得分:0)
SQL Server中与C#foreach
最接近的是CURSOR
。这允许您对一组数据执行每行操作。但是,请谨慎使用游标。应尽可能避免使用它们,因为与通常在SQL查询中执行的基于集合的操作相比,它们的性能不佳。
如果可能,另一种替代方法是将用户定义的函数与CROSS APPLY
or OUTER APPLY
结合使用,如下所示:
SELECT TableRows.Column1, TableRows.Column2, func.ProcessedValue
FROM TableRows
CROSS APPLY dbo.fn_DataProcessingFunction(TableRows.ColumnToBeProcessed) AS func;
答案 2 :(得分:0)
从逻辑到你的伪代码,没有必要的循环,你可以使用标量函数,并像往常一样选择行
CREATE FUNCTION dbo.ProcessColumn (@Column)
RETURN NUMERIC
BEGIN
--Your process here,
--this is some example
DECLARE @var numeric
SET @var = @column + 1
RETURN @var
END
然后将其应用于SELECT STATEMENT
INSERT INTO TABLE1 (Column1, Column2, ProcessedColumn)
SELECT Column1, Column2,
--this is your function, with column of the table
-- as parameter to be processed
dbo.ProcessColumn(Column3)
FROM TABLESOURCE