我怎么觉得这个帖子看到过好几次了?!pp.piggy 发表于 2022-10-10 22:03
LZ了解过SQL的StoredProcedure吗,中文叫存储过程。 存储过程相当于代码里的函数,你自定义一个存储过程(函数),接受一定类型的参数,然后在存储过程中,运行你的SQL业务逻辑,比如insert,select,group by之类的,可以和各种已有的table join。 然后这个存储过程(函数)可以返回一个或者多个结果集(result set),也可以返回单个值。 另外,LZ没有描述具体源数据是什么,如果你的源数据是成百上千条的同类数据(也就是说,你希望你的函数接受的变量是一个List<int>, List<Object>而并非单个的int,object)的话,存储过程也可以解决这个问题。可以有这么几种路子,一是让存储过程接受一个表变量(table variable),相当于让函数接受一个List<MyClass>作为参数。二是把你的源数据按照某种格式做成一个单独的string,比如说json format,然后把json string传给存储过程,最后在存储过程中parse这个string。 如果LZ一次性处理的源数据更大,比方说是上百万或者更多的同类数据,这种时候一般就不是一个存储过程应该解决的了(用代码类比,一个业务函数可以被调用上百万次,但一般并不会在一次调用时处理百万条数据)。如果是使用SQL Server的话,这种时候也许可以用SSIS来解决问题,不过这个属于高级功能,如果LZ现在的业务能用SQL Script解决,那应该用不上SSIS。 lee_hr 发表于 2022-10-11 00:59
谢谢
我确定我是第一次问 刚才搜了好久也没有找到思路 所以想上来问问。
存储过程相当于代码里的函数,你自定义一个存储过程(函数),接受一定类型的参数,然后在存储过程中,运行你的SQL业务逻辑,比如insert,select,group by之类的,可以和各种已有的table join。
然后这个存储过程(函数)可以返回一个或者多个结果集(result set),也可以返回单个值。
另外,LZ没有描述具体源数据是什么,如果你的源数据是成百上千条的同类数据(也就是说,你希望你的函数接受的变量是一个List<int>, List<Object>而并非单个的int,object)的话,存储过程也可以解决这个问题。可以有这么几种路子,一是让存储过程接受一个表变量(table variable),相当于让函数接受一个List<MyClass>作为参数。二是把你的源数据按照某种格式做成一个单独的string,比如说json format,然后把json string传给存储过程,最后在存储过程中parse这个string。
如果LZ一次性处理的源数据更大,比方说是上百万或者更多的同类数据,这种时候一般就不是一个存储过程应该解决的了(用代码类比,一个业务函数可以被调用上百万次,但一般并不会在一次调用时处理百万条数据)。如果是使用SQL Server的话,这种时候也许可以用SSIS来解决问题,不过这个属于高级功能,如果LZ现在的业务能用SQL Script解决,那应该用不上SSIS。
非常感谢 你的解答很清楚 让我终于有了信心