2011-03-07 36 views
7

这么多次看到with和,这么多次的SQL Server请其具有;之前“With”关键字在SQL中如何工作?

如何;with ...工作?

;with coords(...) as (
SELECT * ... 
) 

为什么要在它之前有;呢?

+0

你一定见过这同时用 \t( \t PAD_INDEX创建的表格中'约束= OFF \t,STATISTICS_NORECOMPUTE = OFF \t,IGNORE_DUP_KEY = OFF \t,ALLOW_ROW_LOCKS = ON \t,ALLOW_PAGE_LOCKS = ON \t )'这会导致'with'关键字的多种上下文用法以及常见的表格表达式。分号避免了分析查询时可能在SQL Server思想中蔓延的任何混淆。 – RBT 2016-08-11 23:36:46

回答

14

在SQL中用分号结束查询。把它放在这样的查询之前只是为了确保数据库能够理解任何先前的查询已经结束。

最初它是在每个查询后都需要的,因为它们是逐行输入的,所以数据库必须知道何时运行查询。当整个查询以单个字符串发送时,如果SQL语法不足以确定查询结束的位置,则只需使用分号。由于with关键字具有不同的用途,因此有时需要使用分号才能确保它不属于先前的查询。

1

的使用,用的是公共表表达式(CTE的)。他们试图强制CTE被定义为第一条语句(即不能与查询的其他部分相连,因此;)

2

最好的做法是用分号终止每个SQL语句。 SQL Server文档(例如here)建议这样做将在未来的版本中强制执行,因此现在没有任何理由不习惯这种习惯。

回答这个问题:你在Stackoverflow上看到;WITH...,因为人回答是一个草率的编码器,或者回答的人假设问这个问题的人是一个草率的编码员(并且他们会声称它是后者前者:)这里的“草率编码器”的定义是当他们被迫这样做时只使用分号的人。

+0

Transact-SQL语法约定(http://msdn.microsoft.com/zh-cn/library/ms177563.aspx)“Transact-SQL语句终止符虽然此版本的SQL Server中大多数语句不需要分号,它将在未来的版本中被需要。“ – 2011-12-22 11:34:33