JD1*_*456 5 sql-server procedure function
过程FunctionX,第345行
在函数中无效使用副作用运算符'EXECUTE STRING'.
我在SQL Server 2012中的函数内执行动态语句时出现上述错误.是否有解决方法?任何招数?
PS:sproc(存储过程)太长了,它的主体不能插入函数内部.
DECLARE @execsql NVARCHAR(2000)
Set @execsql = 'INSERT INTO @TABLE1 EXEC SPROC1 ' + @ID_COMPANY + ',' + @ID_COUNTRY
exec (@execsql)
Run Code Online (Sandbox Code Playgroud)
提前谢谢了.
此外,我还需要能够删除函数内部.我知道这与函数的定义相矛盾,但我想知道是否有一些可以使用的技巧
没有技巧,请参阅动态SQL的诅咒和祝福
用户定义函数中的动态SQL
这非常简单:您不能使用在T-SQL中编写的使用定义函数的动态SQL.这是因为您不允许在可能更改数据库状态的UDF中执行任何操作(因为UDF可能作为查询的一部分被调用).由于您可以从动态SQL(包括更新)执行任何操作,因此很明显为什么不允许使用动态SQL.
我在新闻组上看过不止一篇帖子,人们一直在抨击这个帖子.但是,如果要在UDF中使用动态SQL,请退出并重做您的设计.你遇到了障碍,在SQL 2000中没有任何出路.
在SQL 2005及更高版本中,您可以将您的函数实现为CLR函数.回想一下,CLR的所有数据访问都是动态SQL.(你是安全保护的,所以如果你从你的函数执行更新操作,你就会被抓住.)尽管如此警告:来自标量UDF的数据访问通常会带来性能问题.如果你说
SELECT ... FROM tbl WHERE dbo.MyUdf(somecol)= @value
并且MyUdf执行数据访问,您或多或少地创建了一个隐藏的游标.
| 归档时间: |
|
| 查看次数: |
11202 次 |
| 最近记录: |