【转】SQL SERVER函数无法执行对数据库的修改语句
当在函数中使用INSERT语句时出现以下错误:     
消息 443,级别 16,状态 15,过程 MyTestFunction,第 9 行       
在函数内的 'INSERT' 中对带副作用的或依赖于时间的运算符的使用无效。
原因如下:      
 自定义函数和存储过程的定位是不一样的,自定义函数主要用于数据的计算,只能控制函数内部定义的局部变量,包括游标和表,都必须在函数内部定义才能使用,对外部数据库作出的任何永久性修改,都是禁止的。      
 具体来说,不能在函数中执行的操作包括:对数据库表的修改,对不在函数上的局部游标进行操作,发送电子邮件,尝试修改目录,以及生成返回至用户的结果集。
允许的操作也不少的,具体包含以下这些:      
=> DECLARE 语句,该语句可用于定义函数局部的数据变量和游标。      
=> 为函数局部对象的赋值,如使用 SET 为标量和表局部变量赋值。      
=> 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。不允许使用 FETCH 语句将数据返回到客户端。仅允许使用 FETCH 语句通过 INTO 子句给局部变量赋值。      
=> 除 TRY...CATCH 语句之外的控制流语句。      
=> SELECT 语句,该语句包含具有为函数的局部变量赋值的表达式的选择列表。      
=> INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部表变量。      
=> EXECUTE 语句,该语句调用扩展存储过程。
需要注意的是,系统函数中,有两个常用的,是不可以在函数中使用的,分别是newid和rand。      
 其实,如果又要执行以上限制的操作,又要返回值,自定义函数不是唯一的选择,可以在存储过程中增加OUTPUT参数,可以实现同样的效果。
源地址:http://home.51.com/wandrew/diary/item/10034456.html
【转】SQL SERVER函数无法执行对数据库的修改语句的更多相关文章
- Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)
		Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ... 
- SQL SERVER 函数大全[转]
		SQL Server 函数大全 一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下 ... 
- sql server 函数的自定义
		创建用户定义函数.这是一个已保存 Transact-SQL 或公共语言运行时 (CLR) 例程,该例程可返回一个值.用户定义函数不能用于执行修改数据库状态的操作.与系统函数一样,用户定义函数可从查询中 ... 
- 【转载】SQL SERVER 函数大全
		SQL Server 函数大全 一旦成功地从表中检索出数据,就需要进一步操纵这些数据,以获得有用或有意义的结果.这些要求包括:执行计算与数学运算.转换数据.解析数值.组合值和聚合一个范围内的值等. 下 ... 
- c#Winform程序调用app.config文件配置数据库连接字符串  SQL Server文章目录   浅谈SQL Server中统计对于查询的影响   有关索引的DMV  SQL Server中的执行引擎入门 【译】表变量和临时表的比较  对于表列数据类型选择的一点思考  SQL Server复制入门(一)----复制简介  操作系统中的进程与线程
		c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ... 
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
		对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ... 
- 谈一谈SQL Server中的执行计划缓存(上)
		简介 我们平时所写的SQL语句本质只是获取数据的逻辑,而不是获取数据的物理路径.当我们写的SQL语句传到SQL Server的时候,查询分析器会将语句依次进行解析(Parse).绑定(Bind).查询 ... 
- SQL Server Profiler监控执行语句
		SQL Server Profiler监控执行语句,这个功能主要用在实时的监控对数据库执行了什么操作,从而及时有效的跟踪系统的运行. 常规配置选项,名称.模板.保存到文件(可以复用). 事件选择,可以 ... 
- Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)
		Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ... 
随机推荐
- unity3d插件Daikon Forge GUI 中文教程-3-基础控件Button和Sprite的使用
			(游戏蛮牛首发)大家好我是孙广东.官网提供了专业的视频教程http://www.daikonforge.com/dfgui/tutorials/,只是是在youtube上.要观看是须要FQ的. 只是教 ... 
- 一段遍历4X4表格,取出每个单元格内容组合成文本的JS代码
			遍历表格的JS容易忘,留个随笔以备忘. var tableData=""; var table=document.getElementById("XXTableId ... 
- eclipse 打包 apk 文件
			1.通过eclipse中的file ,点击Import 导入项目 2.选择Android 中的 Existing Android Code Into Workspace 3.通过 Brower 引入项 ... 
- JBoss AS 7之基本配置和部署(The Return Of The King)
			1.4 JBoss As 7基本配置 1.4.1 IP訪问控制 因默认情况下,jboss仅可通过127.0.0.1和localhost来訪问.假设你想局域网中的其他IP来訪问,你能够在standalo ... 
- ehcache.xml的配置详解和示例
			<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLoc ... 
- 在命令行上  使用 mutt, fetchmail, maildrop, msmtp 收发邮件
			基于shell 现在已经有了 Mail.app, Thunderbird, Outlook 这些图形化工具能很方便的处理邮件,为啥还需要 mutt 这种命令行文本方式的邮件工具呢?mutt 的一个优势 ... 
- 源码安装和配置zabbix 3.0 LST
			Zabbix是什么 Zabbix 是由Alexei Vladishev创建,目前由Zabbix SIA在持续开发和支持. Zabbix 是一个企业级的分布式开源监控方案. Zabbix是一款能够监控各 ... 
- WEB客户端和服务器
			# encoding=utf-8 #python 2.7.10 #xiaodeng #HTTP权威指南 #HTTP协议:超文本传输协议是在万维网上进行通信时所使用的协议方案. #WEB客户端和服务器: ... 
- vscode简洁的代码编辑器
			微软去年tuichu的代码编辑神器,vscode很不辞哦,感受还不错.微软也破天荒地跨平台地支持... 支持多种语言 vscode(官方):code.visualstudio.com vscode中文 ... 
- C++调用Java的Jar包
			一个简单需求:用C++调用Jar包. 实现基本思路:调用CreateProcess API来启动cmd.exe执行jar包. 调用类CJarAppCall. JarAppCall.h #pragma ... 
