在线等待,关于存储过程、自定义函数方面的问题!
一个表中有3个字段分别是
T1(datetime) | T2(datetime) | A1(numeric)
其中A1字段的值是要用到T1和T2字段的值为参数,通过一个很复杂的存储过程计算得到。
现在T1和T2字段值已经确定,记录大概有100万笔,请问如何批量生成A1字段的值
补充说明:我用过自定义函数,但是提示“只有函数和扩展存储过程才能从函数内部执行”
------解决方案--------------------SQL code
在下面的列表中列出的语句不能用在函数主体中。
赋值语句。
控制流语句。
DECLARE 语句,该语句定义函数局部的数据变量和游标。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
EXECUTE 语句调用扩展存储过程。
常规扩展过程
xp_cmdshell xp_logininfo
xp_enumgroups xp_msver
xp_findnextmsg xp_revokelogin
xp_grantlogin xp_sprintf
xp_logevent xp_sqlmaint
xp_loginconfig xp_sscanf
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
建议你把存储过程转换为函数,然后去调用之更新数据.
例如:函数名dbo.f_setvalue(t1,t2)
update tb set a1 = dbo.f_setvalue(t1,t2)
SQL code
建议你提供详细的资料:
例如表的结构,表之间的关系,测试数据,相关算法及需要的结果。
这样有助于我们理解你的意思,更主要的是能尽快让你获得答案或解决问题的方法。
------解决方案--------------------
改函数肯定可以改:Sp_calcstrdatediff和Sp_datetimetostr过程写成语句(这两个过程和复杂?猜测就一些列case/convert或日期函数之类),#改为@
问题是不从根本上优化算法,对效率提升没有太大的帮助。
------解决方案--------------------
存储过程调用存储过程
全部单条处理
需要改用集合操作思想,成批操作,你的存储过程多于两个参数,其他参数固定?你的这两个参数是固定的还是来自表数据?
估计改成集合操作的存储过程工作量最小,或者改成单行操作的函数,但是由于原来调用存储过程,估计很难改。这是个技术活也是苦力活。