很多次看到with
,并且SQL Server多次询问它之前有;
;with ...
如何运作?
;with coords(...) as (
SELECT * ...
)
为什么必须先有;
?
答案 0 :(得分:14)
分号在SQL中用于结束查询。将它放在像这样的查询之前只是为了确保数据库能够理解任何先前的查询已经结束。
最初在每次查询后都需要逐行输入,因此数据库必须知道何时运行查询。当整个查询以单个字符串发送时,如果SQL语法不足以确定查询结束的位置,则只需要分号。由于with
关键字具有不同的用途,因此有时需要使用分号才能确保它不是上一个查询的一部分。
答案 1 :(得分:5)
对CTE使用WITH要求先前的语句以;
终止。像这样在开始时使用它可以保证正确的语法
SQL Server 2008中的MERGE也是如此
请参阅此问题:Incorrect syntax near the keyword 'with'...previous statement must be terminated with a semicolon
答案 2 :(得分:2)
最佳做法是使用分号终止每个SQL语句。 SQL Server文档(例如here)建议这样做将在未来的版本中强制执行,现在没有理由不养成习惯。
要回答这个问题:你在Stackoverflow上看到;WITH...
,因为回答的人是一个草率的编码人员或者回答的人认为提问的人是一个草率的编码员(他们会声称是后者当它是前者时:)这里的“草率编码器”的定义是在被迫这样做时只使用分号的人。
答案 3 :(得分:1)
WITH的使用是用于公用表表达式(CTE)。他们试图强制将CTE定义为第一个语句(即不能与查询的其他部分链接,因此;)