SQLServer:只有函数和某些扩展存储过程才能从函数内部执行——原因:函数内不行执行存储过程
今天,我看想用动态拼接的方式。在函数中查询数据。(当然,要写的函数不重要。就不复制和截取全貌了)。
执行存储过程
SELECT dbo. ufn_getICItemRule_0614('12021000001',1)
消息 557,级别 16,状态 2,第 2 行
只有函数和某些扩展存储过程才能从函数内部执行。
原来,我犯了常识性的错误。函数中不能调用存储过程。
函数只能使用简单的sql语句,逻辑控制语句,复杂一点的存储过程是不能调用的,在函数里也不能使用execute sp_executesql 或者execut。
函数中为什么不能使用存储过程呢?经过百度以后,我豁然开朗。
原因
在函数内不能改变数据库的值。
函数是用于计算的。它是不能改变你原本的数据库。而存储过程比较复杂,那么它无法判定你是否改变了数据库。所以,就禁用了存储过程语句。
为了验证推测,在函数中写一条更新语句。
参考网址
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。