2009-11-09 57 views
14

在Transact-SQL中,批处理是一组作为一个组一起提交并作为一个组执行的SQL语句。批可以存储在命令文件中。什么是批次?

包含几个SQL语句的* .sql文件被认为是批处理?我们还有什么考虑一批?

+1

这个问题只与tsql有关?闻起来有点像功课... – 2009-11-09 21:16:23

+0

看到标签。 TSQL。 – 2009-11-09 21:18:53

+3

这不是作业 – carewithl 2009-11-10 18:37:10

回答

8

是一个* .sql文件,其中包含几个被视为批处理的sql语句?

的排序。一个* .sql文件实际上可以包含多个批次。您可以通过批分隔符分隔批次。您可能需要多个批处理文件,因为某些语句(特别是某些“ALTER”命令)每批只能执行一次。这可能会使得像在循环中执行ALTER一样棘手。

这里的另一个诀窍是如何分离文件/文档中的各个批次。在99%的Sql Server工具中,批量分隔符是“GO”。然而,这是可以通过工具配置的东西,因此你会偶尔遇到奇怪的人,然后谁使用别的东西。

+2

1)我不确定我是否理解为什么批量生产是一件好事(我意识到某些报表只能每批执行一次,但如果批次不存在,那么我们就不会有这个问题),因此为什么Sql服务器开发团队认为引入批次是个好主意? 2)除了某些语句每批只能执行一次外,还有其他什么原因,为什么我们会将一堆语句放到几个不同批次中,而不是将它们全部放入一个批次中? – carewithl 2009-11-10 18:36:33

+2

某些其他语句(SET选项)将应用到批次结束时。 – 2009-11-10 19:24:34

+1

thanx帮助我 – carewithl 2009-11-11 19:58:37

6

批处理不属于TSQL,它们是SQL Management Studio编辑器的一个功能。因此,例如,您不能提交带有“GO”的ADO.NET命令对象作为命令文本的一部分。

批处理标记 - “GO”指示查询编辑器在执行过程中继续执行之前将SQL提交到该点。

可以将查询编辑器配置为在“GO”旁边使用不同的批处理标记,但这只会让人感到困惑。

+1

他们是TSQL的一部分。您也可以在ADO.NET中使用多个命令发送批处理。 – erikkallen 2009-11-10 19:10:02

+1

我相信你错了。这是GO命令上的MSDN TSQL参考页面:http://msdn.microsoft.com/en-us/library/ms188037.aspx – 2009-11-10 20:37:05

+1

关于第二个想法,我明白你的意思。原始问题中的批处理定义是正确的,批处理会影响TSQL语句的执行。 – 2009-11-10 20:45:04

3

从联机丛书

创建默认值,CREATE FUNCTION,CREATE PROCEDURE,创建规则,创建架构CREATE TRIGGER和CREATE VIEW语句不能在一个批处理中的其它语句组合。 CREATE语句必须启动批处理。该批处理中的所有其他语句都将被解释为第一个CREATE语句定义的一部分。

无法更改表格,然后在同一批次中引用新列。

由此可以推断,在尝试使用它们之前,需要多个批次以确保数据库结构更改生效。