sql-server – ‘;’在TSQL语句的开头
有时我会看到以分号’;’开头的SQL Server语句如下
;WITH cte AS (SELECT ROW_NUMBER() OVER (PARTITION BY Col1,Col2,Col3 ORDER BY ( SELECT 0)) RN FROM #MyTable) DELETE FROM cte WHERE RN > 1 另一个例子是; THROW 为什么有一个’;’ TSQL语句的开始 更新1: 请注意,我在问”’在声明的开头.这个问题与这个问题不重复 When should I use semicolons in SQL Server? 更新2: @MartinSmith答案是有道理的. 为了确保我们有一个完整的答案这个职位,请考虑这个受人尊敬的文章: http://www.sommarskog.se/error_handling/Part1.html#jumpTHROW
我同意@MartinSmith的回答,但似乎这个事情正在采取一些相当极端的水平. 通常,在存储过程中,THROW是由其自己的行声明的. SQL开发人员不仅仅是合并这样的SQL行,而且想要分号. 对我来说,有更多的机会人们意外丢弃一个表,而不是将“THROW”语句与另一行TSQL混合 这个例子在上面引用的这个例子是极端的,很少发生的吗?或者我在这里错过了一点? 解决方法应该是在他们之前的陈述之后.但是在大多数情况下,在TSQL中,终止的冒号语句在实践中目前是可选的(尽管技术上不推荐使用 Not ending Transact-SQL statements with a semicolon),并且不执行语句结束半冒号的存在.一个例外是MERGE语句(确实需要一个终止的半冒号)以及WITH WITH THROW之前的语句 所以对于StackOverflow来说,这是一个有点防御性的做法,如果OP(或者将来的读者)将它粘贴到一些现有的批处理中间,这些批处理在前面的语句中没有必要的半冒号,然后抱怨它不起作用他们收到以下错误.
在前面的语句以分号终止的情况下,额外的语句不会有任何损害.它只是被视为一个空的声明. 这种做法本身可能会导致问题,尽管在多语句无效的上下文中使用CTE.例如在WITH之前插入分号可能会破坏它. CREATE VIEW V1 AS WITH T(X) AS (SELECT 1) SELECT * FROM T; 类似地,THROW盲目插入前导的半结肠也可能引起问题. IF @i IS NULL ;THROW 50000,'@i IS NULL',1;
我已经修复了the example you give in your question,并将其改为 ; --Ensure that any immediately preceding statement is terminated with a semicolon above WITH cte AS (SELECT ROW_NUMBER() OVER (PARTITION BY Col1,Col3 ORDER BY ( SELECT 0)) RN FROM #MyTable) DELETE FROM cte WHERE RN > 1; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql – 主键是否始终分配为聚簇索引
- 浅谈SQL Server中的三种物理连接操作(性能比较)
- linq-to-sql – Linq to SQL抛出StackOverflowException
- sql-server – Sql Server Services – 概述任何人?
- sql-server – 如何从SQL Server Express 2005恢复删除的表
- sqlserver 2005 高可用性架构 日志传送
- Asprain论坛的安装包终于公布了!
- 如何在PL / SQL中每天分组?
- SQLSERVER无法启动
- 消除Key Lookup和RID Lookup Part1:使用Include Index