在SQL Server数据库中使用批处理的注意事项
2009-04-22 10:29:20 来源:WEB开发网三、批处理程序语句所处理对象不存在或不符合会如何处理?
如现在某个批处理程序中有五条语句,其中第一条语句是创建表User,第三条语句是往表User中插入数据(插入的数据与第一条语句中定义的数据类型不符合)。当应用程序把这个批处理程序发给SQL Server数据库的时候,系统会对这个批处理对象进行编译。注意此时只是编译,而没有执行。编译只要语法没有错误即可。最后这个批处理程序会被编译成功,但是没有执行,即没有创建User表。编译完成后,这个批处理程序会运行。第一条语句编译后运行没有错误,但是运行到第二条语句的时候由于需要插入的数据跟第一条语句中所建立的数据库对象不符合,则第三条语句会编译失败。此时批处理终止。笔者举这个例子是为了说明2008数据库版本的一个改善,即对于批处理程序中的语句,数据库是编译一条,而执行一条。
假设这个批处理程序若放在2000版本的SQL Server数据库中,就会出现一个截然不同的结果。由于在2000版本中,对于批处理程序都是整篇编译的。此时在编译的时候就会发现这个对象不符的错误。具体哪一种处理机制好也是各人各有各的看法。笔者还是比较倾向于以前版本的处理方法,即整篇编译。这虽然可能会影响数据库的性能,但是影响不会很大;但是却可以提高批处理程序的正确性。或者说,由此带来的性能方面的损失,可能要比由此对来的对数据库数据的破坏性损失要小的多。不过在这方面各个数据库专家谁也说服不了谁。
四、批处理程序书写的一些限制要求。
由于批处理程序中往往需要完成一整套的功能。而且一旦批处理程序开始运行时,就会缺少用户的监督。或者说,互动性会比较差。为此如何保障批处理程序语句的有效性就显得尤其的重要。为此在书写批处理程序时,数据库设置了一些严格的规范。这些规范跟上面所提高的利用分号来分隔批处理程序语句不同。这里提到的规范具有强制性,即为反这个规则的话将会发生变异错误,批处理程序得不到执行。而上面提到的分号规则不具有强制性,其编辑时不会发生语法性错误,在没有其他错误的情况下可以正常执行这个批处理语句。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接